Hogyan készítsen egy .d.ts „tipizálását” definíciós fájl egy meglévő JavaScript könyvtár?

szavazat
127

Én használ egy csomó könyvtárak mind saját, és 3rd party. Látom a „tipizálását” könyvtár tartalmaz néhány jQuery és WinRT ... de hogyan hoztak létre?

A kérdést 02/10/2012 10:29
a forrás felhasználó
Más nyelveken...                            


8 válasz

szavazat
168

Van néhány lehetőség áll rendelkezésre attól függően, hogy a könyvtár a kérdés, hogy ez van írva, és milyen szintű pontossággal keres. Nézzük meg a lehetőségeket, nagyjából csökkenő sorrendben kívánatos.

Lehet, hogy már létezik

Mindig ellenőrizze DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) először. Ez egy olyan közösség repo teli szó szerint több ezer .d.ts fájlok és nagyon valószínű, hogy a dolog, amit használ már ott van. Azt is ellenőrizni kell TypeSearch ( https://microsoft.github.io/TypeSearch/ ), amely egy kereső NPM közzétett .d.ts fájlokat; ez valamivel több, mint a definíciók DefinitelyTyped. Néhány modul is hajózás saját definíciókat részeként NPM forgalmazás, így is látni, ha ez a helyzet, mielőtt megpróbálja írhatunk.

Lehet, hogy nem kell egy

Géppel most már támogatja a --allowJszászlót, és sokkal jobban fogja JS alapú következtetések levonását Js fájlokat. Meg lehet próbálni, beleértve a Js fájlt a válogatás mellett a --allowJsbeállítás, hogy ha ez ad elég jó információt. Gépelt felismeri a dolgokat, mint ES5 stílusú osztályok és JSDoc megjegyzéseket ezeket a fájlokat, de hogy gáncsot, ha a könyvtár inicializálja magát furcsa módon.

Első lépések: --allowJs

Ha --allowJskaptál tisztességes eredményt, és azt szeretné, hogy írjon egy jobb felbontású fájlt készítünk, akkor össze --allowJsa --declarationlátni géppel a „legjobb becslés” a fajta a könyvtárban. Ez ad egy tisztességes kiindulási pont, és lehet olyan jó, mint egy kézzel szerzője a fájlt, ha a JSDoc megjegyzések jól megírt és a fordító képes volt megtalálni őket.

Első lépések a dts-gen

Ha --allowJsnem működik, akkor érdemes használni, dts-gen ( https://github.com/Microsoft/dts-gen ), hogy a kiindulási pont. Ez az eszköz a futási a tárgy alakja pontosan felsorolni az összes elérhető tulajdonságok. A plusz oldalon ez általában nagyon pontos, de az eszköz még nem támogatja a kaparás JSDoc megjegyzéseket kitöltéséhez további típusok. Futtatása így:

npm install -g dts-gen
dts-gen -m <your-module>

Ez létrehoz your-module.d.tsaz aktuális mappában.

Hit a Szundi gomb

Ha csak azt, hogy ezt az egészet később megy anélkül típusok egy darabig, géppel 2,0 akkor most írni

declare module "foo";

amely segítségével importa "foo"modul típusát any. Ha a globális szeretne foglalkozni később, csak írni

declare const foo: any;

amely megadja a foováltozót.

Válaszolt 02/10/2012 18:11
a forrás felhasználó

szavazat
25

Akkor sem használhatja tsc --declaration fileName.ts, mint Ryan ismerteti, illetve megadhatja declaration: truealatt compilerOptionsa tsconfig.jsonfeltételezve, hogy már volt egy tsconfig.jsonalatt a projekt.

Válaszolt 04/08/2016 00:54
a forrás felhasználó

szavazat
13

A legjobb módja annak, hogy ezt (ha nyilatkozatot fájl nem elérhető DefinitelyTyped ), hogy írjon nyilatkozatok csak a használt dolgok nem a teljes könyvtárat. Ez csökkenti a munka sok -, és ezen felül a fordító van, hogy segítsen ki panaszkodik hiányzó módszereket.

Válaszolt 19/10/2015 09:08
a forrás felhasználó

szavazat
10

Ahogy Ryan mondja, a TSC fordítóprogram egy kapcsoló --declaration, amely létrehoz egy .d.tsfájlt egy .tsfájlba. Szintén fontos megjegyezni, hogy a (korlátozó hibákat) géppel állítólag képes lefordítani Javascript, így át meglévő javascript kódot a TSC fordító.

Válaszolt 03/10/2012 00:02
a forrás felhasználó

szavazat
7

leírtak http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript at 00:33:52 ők építettek egy eszköz átalakítására WebIDL és WinRT metaadatokat gépelt d.ts

Válaszolt 02/10/2012 21:24
a forrás felhasználó

szavazat
2

Itt van néhány PowerShell, hogy létrehoz egy géppel definíciós fájl egy könyvtár, amely magában foglalja a több *.jsfájl modern JavaScript.

Először módosítsa a kiterjesztéseket .ts.

Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }

Másodszor, használja a géppel fordító generál definíciós fájlokat. Lesz egy csomó fordítóprogram hibát, de nem tudjuk figyelmen kívül hagyni azokat.

Get-ChildItem | foreach { tsc $_.Name  }

Végül össze az összes *.d.tsfájlt egy index.d.ts, eltávolítjuk a importnyilatkozatok és eltávolítjuk a defaultminden kiviteli nyilatkozatot.

Remove-Item index.d.ts; 

Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
  foreach { Get-Content $_ } | `
  where { !$_.ToString().StartsWith("import") } | `
  foreach { $_.Replace("export default", "export") } | `
  foreach { Add-Content index.d.ts $_ }

Ez végződik egyetlen használható index.d.tsfájl, amely sok a definíciókat.

Válaszolt 19/08/2016 22:44
a forrás felhasználó

szavazat
2

Azt nézd egy meglévő térképészeti a 3rd party JS könyvtárak, amelyek támogatják a Script # vagy SharpKit. A felhasználók ezen C # .js határokon fordítóprogramok szembesültek a problémát, most szembe, és talán már közzétett egy nyílt forráskódú program, hogy átvizsgálja a 3rd party lib és átalakulhat csontváz C # osztályok. Ha igen hack a szkenner program generál géppel helyett C #.

Ennek hiányában, fordítására a C # nyilvános interfész a 3rd party lib be géppel meghatározásokat lehet egyszerűbb, mint ugyanazt olvasva a forrás JavaScript.

Külön érdek Sencha a ExtJS RIA keret és tudom, hogy van már projektek közzé, hogy létrehoz egy C # értelmezés Script # vagy SharpKit

Válaszolt 04/10/2012 18:37
a forrás felhasználó

szavazat
0

Amikor létrehozza a saját könyvtárát, akkor létrehozhat *.d.tsfájlokat a tsc(géppel Compiler) parancs így néz ki: (feltételezve, hogy építünk a könyvtár a dist/libmappa)

tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
  • -d( --declaration): Generálja a *.d.tsfájlokat
  • --declarationDir dist/lib: Kimeneti könyvtár generált nyilatkozat fájlokat.
  • --declarationMap: Generál sourcemap minden egyes”.d.ts' fájlt.
  • --emitDeclarationOnly: Csak bocsátanak ki”.d.ts nyilatkozat fájlokat. (Nincs összeállított JS)

(lásd a docs összes parancssori fordító beállításai)

Vagy például a package.json:

"scripts": {
    "build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}

majd futtatni: yarn build:types(vagy npm run build:types)

Válaszolt 23/09/2019 19:24
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more