Mein Problem entsteht durch den Versuch, eine TypeScript-Typ-Definition .d.ts
zu einer 3rd-Party-Bibliothek hinzuzufügen. Denken Sie daran, dass ich diese Bibliothek nicht kontrolliere, ich versuche nur, sie zu konsumieren und den TSC-Compiler zu beschwichtigen.Ich suche Typescript Typ Definition new + callable clearation
die Richtlinien hier Lesen re: Schreiben d.ts
Dateien:
https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files
ich bei diesem speziellen Beispiel stehe auf: New + aufrufbare Methoden
Hier zeigt die Dokumentation folgendes Muster:
interface Widget {
sprock(): void;
}
interface WidgetFactory {
new(name: string): Widget;
(width: number, height: number): Widget;
}
declare var widget: WidgetFactory;
Darauf aufbauend Ich habe folgendes für meine Bedürfnisse erstellt:
declare module "react-localization" {
interface LocalizedStringsMethods {
setLanguage(language: string): void;
getLanguage(): string;
getInterfaceLanguage(): string;
formatString(str: string, ...values: any[]): string
getAvailableLanguages(): string[]
}
interface LocalizedStringsFactory {
new (props: any): LocalizedStringsMethods;
}
var LocalizedStrings: LocalizedStringsFactory;
export default LocalizedStrings;
}
Die bemerkenswerte Ausnahme ist die Dokumentation Version nicht declare module
nicht verwendet. Abgesehen davon sollten diese für mein Auge die gleichen sein und ein ähnliches Resultat ergeben; Mir fehlt eindeutig etwas. Ich bekomme stattdessen den folgenden Fehler:
Fehler TS2351: Kann 'neu' nicht mit einem Ausdruck verwenden, dessen Typ einen Aufruf fehlt oder Signatur erstellen.
Ich kann meine Definition dies ändern:
declare module "react-localization" {
var LocalizedStrings: any;
export = LocalizedStrings;
}
Der Fehler ist jetzt weg, aber ich verlieren alle die wunderbare Art Informationen. .? = (
ich ratlos bin Was genau falsch hier tun
Ok, um das Geheimnis zu schreiben, ich versuchte dabei export =
im volleren Typ Beispiel statt export default
:
declare module "react-localization" {
interface LocalizedStringsMethods {
setLanguage(language: string): void;
getLanguage(): string;
getInterfaceLanguage(): string;
formatString(str: string, ...values: any[]): string
getAvailableLanguages(): string[]
}
interface LocalizedStringsFactory {
new (props: any): LocalizedStringsMethods;
}
var LocalizedStrings: LocalizedStringsFactory;
export = LocalizedStrings; // <----- HERE instead of export default
}
?
Kann mir jemand erklären, warum das funktioniert aber export default
endet undefined
Rückkehr auch ich habe diese importieren wie:
import * as LocalizedStrings from 'react-localization'
ich würde es vorziehen, den Import alszu tun. An dieser Stelle werde ich mit der ersten leben, ich möchte nur verstehen warum.
zusätzlich scheint es, dass es relevant ist, dass diese 3rd Party Lib von babel kompiliert wird: https://github.com/Microsoft/TypeScript/issues/5565 'Wenn Babel ein Modul umsetzt, dessen einziger Export ein Export ist Standardmäßig wird ein Modul injiziert.Exporte = Exporte ["Standard"]; In den generierten Code wird das exportierte Objekt zur Funktion selbst (anstelle eines Modulobjekts, das die Funktion als Standardeigenschaft hat). " –