2017-04-09 1 views
0

j'écris un fichier de définition dactylographiée pour la recase NPM package, et je suis la DefinitelyTyped contribution guidelines, dont une partie est de courir (dans mon cas)tsc ne trouve pas la déclaration de module local, mais WebStorm ne

tsc --noImplicitAny recase/recase-tests.ts

ce produit l'erreur:

recase/recase-tests.ts(1,22): error TS7016: Could not find a declaration file for module 'recase'. 'C:/dev/recase-typings/node_modules/recase/recase.js' implicitly has an 'any' type.

légèrement rognée, ceci est ma structure du projet:

. 
+-- recase 
| +-- recase.d.ts 
| +-- recase-tests.ts 
+-- package.js 
+-- tsconfig.json 

En plus de la description, l'auteur et des domaines similaires, ceci est mon package.json (Essayer de le faire au travail, je l'ai mis deux main et typings propriétés là-bas, ayant aucun ou autre ne fonctionne pas non plus):

{ 
    "name": "recase-typings", 
    "version": "1.0.0", 
    "devDependencies": { 
     "recase": "^1.0.4" 
    }, 
    "typings": "recase", 
    "main": "recase" 
} 

Ceci est mon tsconfig.json:

{ 
    "compilerOptions": { 
     "baseUrl": "recase" 
    } 
} 

C'est recase/recase.d.ts:

declare module 'recase' { 
    namespace recase { 
     function camelCopy(orig: any): any; 
     function snakeCopy(orig: any): any; 
    } 
} 

Et ceci est recase/recase-tests.ts:

import {recase} from 'recase'; 

const snake = recase.snakeCopy(
    { 
     FOO: 1,    // Exception 
     abcXyz: {    // Normal 
      _abcXyz: [   // private 
       {__abcXyz: 1} // very private 
       , {___abcXyz: 1} // very very private 
      ], 
     }, 
    }, 
); 
const camel = recase.camelCopy(
    { 
     foo: 1,    // Exception 
     abc_xyz: {    // Normal 
      _abc_xyz: [   // private 
       {__abc_xyz: 1} // very private 
       , {___abc_xyz: 1} // very very private 
      ], 
     }, 
    }, 
); 

Je suis sur Windows 7 et juste fait une réinstallation remove dactylographiée et typages, parce que l'installation précédente plantait. J'ai d'abord utilisé yarn global remove et npm un -i, puis manuellement supprimé tsc fichiers et dossiers qui sont restés dans /AppData/Local/Yarn/config/global/node/global/ et ses .bin/, et dans le dossier des modules de NPM. Pour réinstaller j'ai utilisé yarn global add typescript et yarn global add typings. L'utilisation de yarn pour installer TypeScript a produit une ligne disant que je "voulais probablement installer TypeScript" et utiliser npm install typescript -g, et depuis la commande tscwas not found à ce moment-là, je l'ai suivi avec la commande recommandée.

Je trouve étrange que WebStorm compile bien le fichier, et TSLint ne donne aucune erreur, mais tsc ne trouve pas le fichier de déclaration. Comment puis-je obtenir tsc pour trouver le fichier de déclaration?

Il peut être intéressant de noter que tsc produit réellement un fichier .js qui a exactement le même contenu que lorsque je compile via WebStorm. La discussion de problème la plus proche que j'ai pu trouver est this one, auquel cas la cause première ne l'a pas déclarée comme module externe d'ambiance, mais mettre export devant declare module 'recase' fait TSLint me donner "TS2668: le modificateur" d'exportation "ne peut pas être appliqué aux modules ambiants et aux augmentations de modules puisqu'ils sont toujours visibles »et d'après ce que j'ai pu déduire ailleurs, ma déclaration de module est déjà ambiante.

Répondre

0

Le problème était avec recase.d.ts

Si vous gravez comme cela, il fonctionne:

export function camelCopy(orig: any): any; 
export function snakeCopy(orig: any): any; 

je n'avais pas comprendre que le fichier lui-même est un module.