2017-04-09 65 views
0

我写了一个recase NPM package打字稿定义文件,所以我正在关注的DefinitelyTyped contribution guidelines,其中一部分是运行(对我来说)TSC没有找到本地模块声明,但Webstorm确实

tsc --noImplicitAny recase/recase-tests.ts

这将产生错误:

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.

稍微修剪,这是我的项目结构:

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

除了描述,作者,以及类似的领域,这是我package.json(试图得到它的工作,我已经把两者maintypings性质在里面,有没有或任也不起作用):

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

这是我tsconfig.json

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

这是recase/recase.d.ts

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

这是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 
      ], 
     }, 
    }, 
); 

我对Windows 7和刚刚做打字稿及分型的删除重新安装,因为以前安装了崩溃。我首先使用yarn global removenpm un -i,然后手动删除tsc文件和文件夹,这些文件和文件夹保留在/AppData/Local/Yarn/config/global/node/global/及其.bin/和NPM的模块文件夹中。

要重新安装,我使用了yarn global add typescriptyarn global add typings。使用yarn来安装TypeScript会产生一行说“我可能打算安装TypeScript”并使用npm install typescript -g,并且自从tsc命令was not found在那一刻起,我使用推荐的命令对其进行了跟踪。

我觉得很奇怪WebStorm编译文件很好,而TSLint没有提供任何错误,但tsc没有找到声明文件。 如何获得tsc以查找声明文件?

值得注意的是,tsc实际上确实产生了一个.js文件,它与我通过WebStorm进行编译时的内容完全相同。我已经能够找到的最接近的问题讨论是this one,在这种情况下,根本原因未声明为环境外部模块,但在declare module 'recase'前放export使TSLint给我“TS2668:'导出'修饰符不能应用于环境模块和模块增强,因为它们始终可见“,而且从我能从别处推测出来的模块声明已经是环境。

回答

0

的问题是与recase.d.ts

当这样写它的工作原理:

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

我没能理解该文件本身是一个模块。

相关问题