2017-04-09 75 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; 

我沒能理解該文件本身是一個模塊。