Pytanie Jak napisać plik d.ts z istniejącego pliku .js?


Używam maszynopisu i chcę użyć biblioteki jquery.steps do stworzenia kreatora z maszynopisu. W tej chwili dla pliku jquery.steps nie ma dostępnego pliku definicji maszynowej. Próbujemy wymyślić, jak napisać plik do pisania.


12
2017-08-05 11:28


pochodzenie




Odpowiedzi:


Zawsze możesz zdefiniować dowolny obiekt jako typ any a następnie wywołaj dowolne metody. Oczywiście stracisz sprawdzanie typu, więc tworzenie d.ts jest prawdopodobnie lepszy, ale czasochłonny.

W każdym razie powinieneś zrobić plik jquery.steps.d.ts w tym samym folderze co jquery.steps.js. Musisz się odwołać jquery.d.ts.

///<reference path="../jquery/jquery.d.ts" />

Teraz jesteś gotowy, aby zacząć pisać ...

Najpierw utworzysz interfejs JQuery i dodasz dowolne metody rozszerzające standardowy obiekt jQuery ($). Zostanie on scalony z interfejsem JQuery zdefiniowanym w jquery.d.ts i będziesz mógł wywoływać te metody z TypeScript. Nazwa metody musi pasować do jej nazwy w JavaScript. Nazwy parametrów można zmienić. Wartość zwracana musi być taka sama jak w JavaScript.

1) Definicja

interface JQuery {
    testMethod(parameter: string): JQuery;
}

2) Użytkowanie

var $: JQuery;
$.testMethod("test");

Jeśli używane są jakieś specjalne obiekty, zazwyczaj ustawienia wtyczki i podobne, należy to zdefiniować jako osobny interfejs. Nazwa interwału nie ma znaczenia, ale nazwy właściwości muszą być zgodne z jej nazwami w JavaScript.

1) Definicja

interface IJQueryPluginSettings {
    test: string;
}

interface JQuery {
    initPlugin(settings: IJQueryPluginSettings): JQuery;
}

2) Użytkowanie

var $: JQuery;
var settings: IJQueryPluginSettings = <IJQueryPluginSettings> {
    test: "test"
};

$.initPlugin(settings);

Dzięki takiemu podejściu można objąć większość kodu. Kluczem jest nazwanie metod / właściwości, które muszą być zgodne. Również spojrzenie na już utworzone d.ts pomoże Ci. Zobacz podobne wtyczki, takie jak https://github.com/borisyankov/DefinitelyTyped/blob/master/jquery.joyride/jquery.joyride.d.ts lub bardziej skomplikowane https://github.com/borisyankov/DefinitelyTyped/blob/master/jqueryui/jqueryui.d.ts

Nie musisz objąć wszystkich metod / właściwości, aby go użyć. Możesz pokryć tylko kod, który chcesz wywołać z TypeScript. Jeśli pokrywasz całą lub większość wtyczki jQuery, prześlij ją do https://github.com/borisyankov/DefinitelyTyped


13
2017-08-05 12:14



To powinno pomóc, dzięki za szczegółowe informacje - Sushant Srivastava