Ici, nous apprenons à écrire un fichier de déclaration Typescript de haute qualité. Vous codez donc dans ReactJS et souhaitez importer un fichier SVG mais votre IDE/tsc se plaint.
[ts] cannot find module './logo.svg'
C'est le moment de se tourner vers Stackoverflow pour une solution de copier-coller rapide.
Mais tenons le coup et essayons de comprendre ces fichiers et ce qu'ils font pour nous pendant une seconde.
Dans TS/JS, nous avons eu de nombreuses approches pour modulariser nos applications écrites en TS/JS. Actuellement, ce qui règne en maître, c'est l'ESM (modules AKA ES, modules ES6). Nous les connaissons généralement avec leur syntaxe :
Donc, pour répondre à la question d'origine, en TS/JS conformément à ECMAScript 2015, tout fichier contenant une importation ou une exportation de niveau supérieur est considéré comme un module.
Et si l'on n'a pas d'import ou d'export de premier niveau :
Plus de pollution globale des espaces de noms. Cela implique que :
Dans le module TS, la résolution consiste à extraire une chaîne de l'instruction import ou require et à déterminer à quel fichier cette chaîne fait référence.
Dans TS, nous avons deux stratégies :
BTW, nous avons des tonnes d'endroits où nous pourrions le modifier intentionnellement ou non (moduleResolution, baseUrl, paths, rootDirs).
Par exemple, si vous créez votre application pour utiliser ESM (la version compilée utilise ESM), vous devez alors choisir "NodeNext" dans votre compilerOptions.module.
Remarque : si à l'intérieur de ce répertoire, vous avez un package.json. Ensuite, TS utilise son principal et ses types pour récupérer ses types.
En savoir plus ici.
Donc, fondamentalement, il remappe les importations vers l'emplacement de recherche*s* par rapport à baseUrl s'il est défini, sinon vers le fichier tsconfig. Le cas d'utilisation le plus courant est celui des alias de chemin :
[ts] cannot find module './logo.svg'
Attention
Cela ne veut rien dire pour le runtime. Cela signifie que votre cher bundler ou compilateur doit prendre soin de les regrouper correctement. Et si votre chemin pointe vers un endroit qui n'existe pas, votre application plantera lors de son exécution par NodeJS.
Conseil
Au lieu de cela, vous pouvez utiliser les importations de package.json (importations AKA Subpath).
Pour affecter la sortie JS émise, nous pouvons modifier :
Nous voulons donc importer un fichier .graphql ou une autre extension dont TS n'a aucune idée de à quoi ils ressemblent (il ne peut pas résoudre leurs types). Alors maintenant, TS sait à quoi ressemblera un fichier svg, graphql ou autre importé.
réf.
Spécificateur nu : un nom de module dans une instruction d'importation qui n'est PAS un chemin relatif ou absolu. Il s'agit généralement de noms de packages dans les node_modules de votre projet ou dans d'autres emplacements configurés. ↩
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!