web-dev-qa-db-fra.com

Où dois-je placer les fichiers .d.ts personnalisés?

J'essaie de fournir des saisies pour le paquet qui ne les a pas:

error TS7016: Could not find a declaration file for module 'inputmask-core'. './node_modules/inputmask-core/lib/index.js' implicitly has an 'any' type.
Try `npm install @types/inputmask-core` if it exists or add a new declaration (.d.ts) file containing `declare module 'inputmask-core';`

J'utilise ts-loader dans webpack avec TypeScript 2.4.2, et j'ai les racines de type suivantes configurées dans tsconfig.json:

"typeRoots": [
  "./node_modules/@types",
  "./src/client/types"
]

J'ai essayé d'imiter la structure du package dans node_modules/@types:

src/client/types
|--inputmask-core
  |--index.d.ts

Avec ce qui suit dans index.d.ts:

declare class InputMask {}
export default InputMask;

Mais l'erreur est toujours là. Qu'est-ce que je fais mal? Où dois-je placer ces fichiers .d.ts personnalisés?

Et quelle est la différence entre node_modules/@types et toute autre racine de type? Pourquoi TypeScript les traite-t-il différemment?

24
Rogach

Utilisez des chemins au lieu de typeRoots -

via https://github.com/Microsoft/TypeScript/issues/22217#issuecomment-369783776

"typeRoots" est destiné au code global. c'est-à-dire quelque chose qui est déclaré dans l'espace de noms global, et que vous souhaitez l'inclure. Pour les modules, ils ont leur propre portée, tout ce dont vous avez besoin est un mappage de chemin .. quelque chose comme:

{
"compilerOptions": {
    "target": "es2017",
    "baseUrl": "./",
    "paths": {
        "*" : ["src/client/@custom_types/*"]
    }
},
"exclude": ["node_modules", "src/client/@custom_types", ...]
}

Remarque: baseUrl est requis avec les chemins d'accès et vous souhaiterez probablement également ajouter le répertoire à exclure.

6
Ville

Solution possible: placez ce qui suit dans index.d.ts, et il se compilera:

declare module "inputmask-core" {
    declare class InputMask {}
    export default InputMask;
}

Je ne comprends toujours pas le traitement spécial que node_modules/@types obtient, cependant.

3
Rogach