Comment produire vous un .d.ts « typages » fichier de définition à partir d'une bibliothèque JavaScript existante?

voix
127

J'utilise beaucoup de bibliothèques à la fois mon propre et 3e partie. Je vois le répertoire « typages » contient quelques-uns pour Jquery et WinRT ... mais comment sont-ils créés?

Créé 02/10/2012 à 10:29
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
168

Il y a quelques options disponibles pour vous en fonction de la bibliothèque en question, comment il est écrit, et quel niveau de précision que vous recherchez. Passons en revue les options, à peu près l'ordre décroissant de désirabilité.

Peut-être qu'il existe déjà

Toujours vérifier DefinitelyTyped ( https://github.com/DefinitelyTyped/DefinitelyTyped ) en premier. Ceci est une prise en pension complète communautaire de milliers de fichiers .d.ts et il est très probable que la chose que vous utilisez est déjà là. Vous devriez également vérifier TypeSearch ( https://microsoft.github.io/TypeSearch/ ) qui est un moteur de recherche pour les fichiers .d.ts publié MNP; cela aura des définitions légèrement plus que DefinitelyTyped. Quelques modules sont exportant également leurs propres définitions dans le cadre de leur distribution de NPM, donc voir également si tel est le cas avant d' essayer d'écrire votre propre.

Peut-être que vous ne avez pas besoin

Tapuscrit soutient maintenant le --allowJsdrapeau et fera plus des déductions basées sur JS dans des fichiers .js. Vous pouvez inclure le fichier .js dans votre compilation avec le --allowJsparamètre pour voir si cela vous donne assez bonne information de type. Tapuscrit reconnaîtra des choses comme des cours de style ES5 et commentaires jsdoc dans ces fichiers, mais peut se trébucher si la bibliothèque elle - même initialise d'une manière bizarre.

Commencez avec --allowJs

Si --allowJsvous a donné des résultats décents et que vous voulez écrire un meilleur fichier vous - même définition, vous pouvez combiner --allowJsavec --declarationpour voir « meilleure estimation » de tapuscrit les types de la bibliothèque. Cela vous donnera un point de départ décent, et peut être aussi bon que l' auteur d' un fichier à la main si les commentaires de jsdoc sont bien écrits et le compilateur a pu les trouver.

Commencez avec dts-gen

Si --allowJsne fonctionne pas, vous pouvez utiliser dts-gen ( https://github.com/Microsoft/dts-gen pour obtenir un point de départ). Cet outil utilise la forme d'exécution de l'objet d'énumérer avec précision toutes les propriétés disponibles. Du côté positif cela tend à être très précis, mais l'outil ne supporte pas encore gratter les commentaires de jsdoc pour remplir d' autres types. Vous exécutez ce comme ceci:

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

Cela va générer your-module.d.tsdans le dossier en cours.

Appuyez sur le bouton Snooze

Si vous voulez juste faire tout plus tard et aller sans types pendant un certain temps, dactylographiée 2.0 vous pouvez maintenant écrire

declare module "foo";

qui vous permettra de importle "foo"module avec le type any. Si vous avez un monde que vous voulez traiter plus tard, il suffit d' écrire

declare const foo: any;

qui vous donnera une foovariable.

Créé 02/10/2012 à 18:11
source utilisateur

voix
25

Vous pouvez utiliser tsc --declaration fileName.tscomme Ryan décrit, ou vous pouvez spécifier declaration: truedans compilerOptionsvotre tsconfig.jsonsupposant que vous avez déjà eu un tsconfig.jsonsous votre projet.

Créé 04/08/2016 à 00:54
source utilisateur

voix
13

La meilleure façon de traiter cette (si un fichier de déclaration n'est pas disponible sur DefinitelyTyped ) est d'écrire des déclarations que pour les choses que vous utilisez plutôt que l'ensemble de la bibliothèque. Cela réduit le travail beaucoup - et en plus le compilateur est là pour aider en se plaignant de méthodes manquantes.

Créé 19/10/2015 à 09:08
source utilisateur

voix
10

Comme le dit Ryan, le compilateur tsc dispose d' un commutateur --declarationqui génère un .d.tsfichier à partir d' un .tsfichier. Notez également que (bugs barrant) tapuscrit est censé être en mesure de compiler Javascript, vous pouvez passer le code existant javascript au compilateur tsc.

Créé 03/10/2012 à 00:02
source utilisateur

voix
7

comme décrit dans http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript à 00:33:52 , ils avaient construit un outil pour convertir les métadonnées WebIDL et WinRT en tapuscrit d.ts

Créé 02/10/2012 à 21:24
source utilisateur

voix
2

Voici quelques PowerShell qui crée un seul fichier de définition dactylographiée une bibliothèque qui comprend plusieurs *.jsfichiers avec JavaScript moderne.

Tout d' abord, changer toutes les extensions .ts.

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

En second lieu, utiliser le compilateur dactylographiée pour générer des fichiers de définition. Il y aura un tas d'erreurs du compilateur, mais nous pouvons ignorer ceux-ci.

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

Enfin, combiner tous les *.d.tsfichiers en un seul index.d.ts, en supprimant les importdéclarations et la suppression defaultde chaque déclaration d'exportation.

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 $_ }

Cela se termine par un seul, utilisable index.d.tsfichier qui comprend un grand nombre de définitions.

Créé 19/08/2016 à 22:44
source utilisateur

voix
2

Je chercherais une cartographie existante de votre 3ème partie JS bibliothèques qui prennent en charge Script # ou SharpKit. Les utilisateurs de ces C # pour .js compilateurs croisés face auront le problème que vous faites face maintenant et pourraient avoir publié un programme open source pour scanner votre lib 3ème partie et convertir en squelette C # classes. Si oui pirater le programme scanner pour générer tapuscrit en place de C #.

A défaut, la traduction d'un C # public interface pour votre 3ème partie lib dans les définitions de tapuscrit peut-être plus simple que de faire la même chose en lisant la source JavaScript.

Mon intérêt particulier est le cadre ExtJS RIA de Sencha et je sais qu'il ya eu des projets publiés pour générer une interprétation C # pour Script # ou SharpKit

Créé 04/10/2012 à 18:37
source utilisateur

voix
0

Lorsque vous créez votre propre bibliothèque, vous pouvez créer des *.d.tsfichiers en utilisant la tsccommande (tapuscrit compilateur) comme ceci: ( en supposant que vous construisez votre bibliothèque au dist/libdossier)

tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
  • -d( --declaration): Génère les *.d.tsfichiers
  • --declarationDir dist/lib: Répertoire de sortie pour les fichiers de déclaration générés.
  • --declarationMap: Génère un Sourcemap pour chaque fichier « .d.ts' correspondant.
  • --emitDeclarationOnly: Émettre uniquement les fichiers de déclaration » .d.ts de. (Pas compilé JS)

(voir les documents pour toutes les options du compilateur de ligne de commande)

Ou par exemple dans votre package.json:

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

puis exécuter: yarn build:types(ou npm run build:types)

Créé 23/09/2019 à 19:24
source utilisateur

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