web-dev-qa-db-fra.com

Exclure / remplacer les saisies fournies par npm

J'ai un paquet npm avec des dactylographies mal écrites et obsolètes. J'ai écrit mes propres dactylographies et maintenant je me demande si je peux en quelque sorte exclure les dactylographies originales du paquet npm. Ce n'est pas une simple extension d'interfaces, les originaux sont essentiellement des ordures à ce stade.

L'utilisation de la liste d'exclusion dans tsconfig.json ne fonctionne bien sûr pas à cet effet, car elle charge toujours les fichiers à partir de node_modules même si vous excluez ce dossier.

21
Simon Meskens

Vous pouvez obtenir le comportement souhaité avec l'option de chemins dans tsConfig. Cela pourrait ressembler à ceci:

{
    "compilerOptions": {
       ...
        "paths": {
            "*": [
                "src/*",
                "declarations/*"
            ]
        }
    },
    ...
}

Avec cette configuration, TypeScript recherche des modules dans src (il devrait y avoir toute la source de l'application) et également dans les déclarations, dans le dossier des déclarations, je place généralement mes déclarations supplémentaires nécessaires.

Pour remplacer les saisies d'un module de nœud, il existe deux options:

  1. placez un dossier nommé comme le module dans le dossier des déclarations, contenant un fichier appelé index.d.ts pour les typages

  2. placez un fichier de déclaration, nommé comme le module, dans le dossier des déclarations

Comme exemple de travail, vous pouvez jeter un œil à ce dépôt https://github.com/kaoDev/react-ts-sample

Un indice important de Bernhard Koenig :

L'ordre des chemins compte. J'ai dû mettre le chemin avec mes remplacements avant le chemin avec les définitions de type d'origine afin que mes remplacements soient récupérés en premier. - Bernhard Koenig

11
Kalle

Créer node_modules dossier sous votre src, puis mettez les typages des modules que vous souhaitez écraser à l'intérieur:

├── node_modules
│   └── ...
│
└── src
    ├── index.ts
    ├── ... your codes ...
    │
    └── node_modules
        └── <module-to-be-overwritten>
            └── index.d.ts

Pas besoin de modifier compilerOptions dans tsconfig.json.

Lire Comment TypeScript résout la section des modules dans https://www.typescriptlang.org/docs/handbook/module-resolution.html =.

19
aleung