8

Istnieje wiele wątków dla podobnych problemów, ale o ile mogę powiedzieć, że jest to unikat.Deklarowanie biblioteki JS do użytku z TypeScript

Używam wtyczki jQuery Address w mojej aplikacji i chcę jej użyć w pliku TypeScript. Niestety dla biblioteki nie ma dostępnego skryptu. Kiedy próbuję użyć jQuery.address, otrzymuję:

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

Per this thread, próbowałem zdefiniować address wewnątrz jquery.d.ts:

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

I myślę, że to wydaje się działać na $. adres(); ale nie dla żadnej z metod adresowych. Próbowałem również utworzyć własny plik .d.ts za this thread, ale wciąż nie ma szczęścia. I próbowałem używać declare w pliku .d .ts. Brak szczęścia.

Jedyny sposób, że muszę wykorzystać to metoda parameter ...

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

W takim przypadku pojawia się:

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

Wszelkie pomysły, w jaki sposób mogę rozwiązać ten problem?

edit: Pracuję w środowisku Visual Studio C# .net, jeśli to pomaga.

Odpowiedz

11

Nie trzeba samemu edytować jquery.d.ts; umieść te definicje we własnym pliku, aby można je było właściwie konserwować. Coś minimalnego będzie takie:

// 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

TAK! Tak było. I znacznie lepiej, tworząc nowy plik. Wielkie dzięki! – dmathisen

3

Poniższy idzie wewnątrz jquery.d.ts:

interface JQueryStatic { 
    address(options): JQueryAddress; 
} 

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

nadzieję, że pomoże!

+0

Dzięki. To rozwiązało problem "adresu", ale wciąż dostaję "Parametr właściwości" nie istnieje dla wartości typu "adres" ". Więc $ .address() działa, ale $ .address.parameter() nie działa. – dmathisen

+2

Nie edytuj istniejącego pliku .d.ts, aby dodać członków interfejsu - interfejsy są otwarte i można je rozszerzyć, po prostu deklarując inny blok interfejsu o tej samej nazwie. –

Powiązane problemy