2017-06-27 44 views

回答

0

有類似的問題,包括amazon-cognito-identity-js到Angular 4應用程序中。基本上Typescript不理解這些節點類型(緩衝區,http,流,fs等等)。要理解爲什麼,我們需要看看how Typescript specifies packages to include

默認情況下,所有可見的「@types」包都包含在您的 編譯中。任何包含文件夾 的node_modules/@類型中的包都被視爲可見;具體而言,這意味着內 ./node_modules/@types/,../node_modules/@types/, ../../node_modules/@types/包,等等。

如果指定typesRoots,則只包含typeRoots下的包。例如:

{ 
    "compilerOptions": { 
     "typeRoots" : ["./typings"] 
    } 
} 

這個配置文件將包括./node_modules/@types下./typings所有的包,並沒有包。

如果指定了類型,則只包含列出的軟件包。例如:

{ 
    "compilerOptions": { 
     "types" : ["node", "lodash", "express"] 
    } 
} 

這tsconfig.json文件將只包括./node_modules/@types/node,./node_modules/@types/lodash和./node_modules/@types/express。不包括node_modules/@ types/*下的其他軟件包。

討厭複製/粘貼基本上的答案,但我真的不能說它比文檔更好。

檢查"typeRoots"和/或"types"在任何tsconfig.json文件的定義(角-CLI項目有./tsconfig.json./app/tsconfig.app.json文件)。

如果定義了"typeRoots",請確保包含"node_modules/@types"。如果定義了"types",請確保包含"node"

要包括所有的@types,請從"compilerOptions"完全的"typeRoots""types",但請記住,這可能會產生不同類型的聲明之間的衝突,所以最好的選擇是可能有包含在"types"財產"node"

+0

我遇到了同樣的問題,但在tsconfig.json文件中沒有定義typeRoot或類型。任何人都可以找到答案? – JasonPerr

+0

如果遇到此問題,這意味着typescript編譯器不知道安裝node_modules所依賴的基本Node類型。如果沒有定義'typeRoots'或'types',則包含所有@types文件夾。確保'@ types/node'被安裝爲devDependency('npm i -D @ types/node')並嘗試重新編譯。 – nwayve

+0

我試過了。問題在於缺少類型的地方在aws-sdk node_modules文件夾中。奇怪的是,它似乎可以在任何OSX系統上正常工作,但在我嘗試的任何Windows 10系統上出現此錯誤。我不明白爲什麼會有差異。 – JasonPerr

0

我發現了幾個不同的東西,似乎有助於解決這個問題。感謝Benny Neugebauer對這篇文章的回答:error TS2304: Cannot find name 'Buffer'

我發現解決這個問題的關鍵是做以下工作。

  1. 使用的的NodeJS的穩定版本,而不是最新版本

  2. 安裝與NPM的分型工具安裝-g分型

  3. 安裝類型的定義與分型安裝DT〜節點--global --save

  4. 確認您沒有安裝這些類型,因爲它們會導致以我發現的使Windows和OSX同時工作的唯一解決方案起訴。 NPM刪除@類型/節點

  5. 刪除你的文件夾node_modules與紗重建

  6. 添加引用路徑app.component.ts

    /// <reference path="../../typings/index.d.ts" /> 
    
    export class YourClass { 
    

後這樣做一切正常。這是在Windows 10環境和OSX環境中工作的唯一解決方案。我最後tsconfig.json文件看起來像這樣FYI

{ 
    "compilerOptions": { 
    "allowSyntheticDefaultImports": true, 
    "declaration": false, 
    "emitDecoratorMetadata": true, 
    "experimentalDecorators": true, 
    "lib": [ 
     "dom", 
     "es2015" 
    ], 
    "module": "es2015", 
    "moduleResolution": "node", 
    "sourceMap": true, 
    "target": "es5" 
    }, 
    "include": [ 
    "src/**/*.ts" 
    ], 
    "exclude": [ 
    "node_modules" 
    ], 
    "compileOnSave": false, 
    "atom": { 
    "rewriteTsconfig": false 
    } 
}