79 votes

Comment ajouter des "typages" personnalisés dans typescript 2.0 / 3.0

Según ce Le système de typage de l'article pour Typescript 2.0 a été modifié et il n'est pas clair comment attacher des typages personnalisés maintenant. Dois-je toujours créer un paquet NPM pour cela ?

Merci d'avance !

0 votes

Voulez-vous dire l'augmentation des modules (c'est-à-dire l'extension des modules) ?

0 votes

Juste une chose simple, j'ai besoin de fournir des déclarations pour le code JS externe qui n'est pas couvert par le système "@type" (il n'y a aucun moyen pour moi de publier ces types via npm, le code et les interfaces sont privés).

142voto

MisterMetaphor Points 2087

Vous pouvez créer des typages locaux personnalisés juste pour votre projet, où vous pouvez déclarer des types pour les bibliothèques JS. Pour cela, vous devez :

  1. Créez une structure de répertoire pour conserver vos fichiers de déclaration de type de sorte que votre structure de répertoire ressemble à ceci :

     .
      custom_typings
         some-js-lib
             index.d.ts
      tsconfig.json
  2. Dans le index.d.ts ajoutez une déclaration pour votre bibliothèque JS :

     declare module 'some-js-lib' {
       export function hello(world: string): void
     }
  3. (Facultatif : passez si vous avez TypeScript >= 4.x) Ajoutez une référence à cette déclaration de type dans le fichier compilerOptions de votre tsconfig.json :

     {
       "compilerOptions": {
         ...
         "typeRoots": ["./node_modules/@types", "./custom_typings"]
       },
       ...
     }
  4. Utilisez le module déclaré dans votre code :

     import { hello } from 'some-js-lib'
    
     hello('world!')

3 votes

Je ne suis pas sûr que l'étape 3 soit nécessaire. Cela semble fonctionner pour moi sans cette étape. Il semble aussi que index.d.ts o declarations.d.ts peut aller n'importe où dans le projet.

3 votes

Oui, vous pouvez mettre votre declare module ... dans n'importe quel .d.ts fichier.

5 votes

L'étape 3 est nécessaire, mais vous devez seulement spécifier "typeRoots", et non "types". De plus, vous effacerez le chemin par défaut, vous devriez donc utiliser "typeRoots" : ["custom_typings", "node_modules/@types"]

0voto

Pelle Jacobs Points 1030

En supposant que vous avez votre paquet js externe installé sous node_modules, je pense qu'il y a deux options :

  • fournir un texte type dans le paquet et ajoutez-y une référence :

    // node_modules/secret-package/index.d.ts
    export interface SecretInterface {
      // ¯\_(ツ)_/¯
    }

    Et référencez le fichier typing dans le package.json :

    // node_modules/secret-package/package.json
    {
       ..., 
       "typings": "./index.d.ts",
       ...,
    }
  • augmenter le module dans un fichier de déclaration de votre projet

    // index.d.ts
    declare module 'secret-package' {
      interface SecretInterface {
        // ¯\_(ツ)_/¯
      }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X