8

Es gibt viele Threads für ähnliche Probleme, aber soweit ich das beurteilen kann, ist dies einzigartig.Deklarieren einer JS-Bibliothek für die Verwendung mit TypeScript

Ich verwende jQuery Address Plugin in meiner App und möchte es in einer TypeScript-Datei verwenden. Leider ist kein DefinitelyTyped Skript für die Bibliothek verfügbar. Wenn ich versuche, jQuery.address zu verwenden, erhalte ich:

The property 'address' does not exist on value of type 'jQueryStatic' 

Per this thread, habe ich versucht, address innerhalb von jquery.d.ts zu definieren:

interface JQueryStatic { 
    address(options): any; 
    ... 
} 

Und ich denke, das für $ zu funktionieren scheint. Adresse(); aber nicht für irgendwelche Adressenmethoden. Ich habe auch versucht, meine eigene .d.ts-Datei per this thread zu erstellen, aber immer noch kein Glück. Und ich habe versucht, declare in einer .d.ts Datei zu verwenden. Kein Glück.

Die einzige Methode, die ich verwenden müssen, ist die parameter Methode ...

$.address.parameter('param', 1); 

In diesem Fall erhalte ich:

The property 'parameter' does not exist on value of type 'address' 

Alle Ideen, wie ich dieses Problem lösen kann?

bearbeiten: Ich arbeite in einer Visual Studio C# .net-Umgebung, wenn das hilft.

Antwort

11

Sie sollten jquery.d.ts nicht selbst bearbeiten müssen; Legen Sie diese Definitionen in eine eigene Datei, damit sie ordnungsgemäß verwaltet werden können. Etwas minimales würde so sein:

// For methods on e.g. $('a') 
interface JQuery { 
    address(callback?:() => void): JQuery; 
} 

// For methods on $ 
interface JQueryStatic { 
    address: JQueryAddressStatic; 
} 

interface JQueryAddressStatic { 
    (): JQuery; 
    parameter(name: string): string; 
    parameter(name: string, value: string, append?: boolean): JQuery; 
} 
+0

JA! Das hat es getan. Und viel besser, eine neue Datei zu erstellen. Danke vielmals! – dmathisen

3

Das folgende geht innen jquery.d.ts:

interface JQueryStatic { 
    address(options): JQueryAddress; 
} 

interface JQueryAddress { 
    parameter(name, value): any; 
} 

Hoffnung, das hilft!

+0

Danke. Das hat das 'Adresse'-Problem gelöst, aber ich bekomme immer noch "Der Parameter' property 'existiert nicht beim Wert vom Typ' address '". So funktioniert $ .address(), aber $ .address.parameter() nicht. – dmathisen

+2

Bearbeiten Sie keine vorhandene .d.ts-Datei, um Schnittstellenelemente hinzuzufügen - Schnittstellen sind geöffnet und können erweitert werden, indem einfach ein anderer Schnittstellenblock mit demselben Namen deklariert wird. –

Verwandte Themen