2017-04-14 78 views
6

我一直在使用這個自耕農生成器生成的角1個項目,打字稿:https://github.com/FountainJS/generator-fountain-systemjs
它採用SystemJS和熱蒙公司獲得的依賴性,但新公共類型定義(使用DefinitelyTyped庫)。如何導入一刻類型定義

我一直在努力嘗試導入這些最近幾天時刻的類型定義。 我一直在使用JSPM安裝了一會兒,我發現,它有它自己的類型定義,因此,如果調用命令npm install @types/moment --save-dev你只能得到一個存根和折舊警告

這是一個存根類型定義Moment (https://github.com/moment/moment)。 Moment提供了它自己的類型 的定義,所以你不需要@ types/moment安裝!

現在,我不知道這是否是我的編輯器,項目或打字稿設置或一個真正的打字稿的問題,但我似乎無法能夠正確導入片刻的類型定義。

如果我這樣做要麼import moment from 'moment';import * as moment from 'moment';我得到我的編輯這個錯誤(原子與原子打字稿,但我已經在Visual Studio代碼相同的錯誤)Cannot find module 'moment'.

儘管這樣的錯誤,當我建立我的應用它工作正常(調用時刻功能)。

我已經嘗試了很多在互聯網上找到的解決方案(顯然,從時刻導入類型定義是一個常見問題),但都沒有成功。 昨天我設法通過在node_modules/@types內部手動創建目錄moment並將moment.d.ts放入其中(我不得不將其重命名爲index.d.ts)。

因爲我不太喜歡這個解決方案,所以我想至少創建一個類型文件夾,我可以放入東西而不必修改node_modules結構。所以,我創建了一個文件夾custom-types並把moment文件夾類型定義存在,然後添加到custom-typestsconfig.json,我認爲這將一直工作得很好,但實際上錯誤再次出現......

現在我的想法,我真的不知道還有什麼要嘗試。

這是我目前tsconfig.json(在最後一次嘗試做事情的工作我已經添加了custom-types文件夾路徑不同,但它是在同一水平node_modules文件夾和tsconfig.json文件)

{ 
    "compilerOptions": { 
     "sourceMap": true, 
     "emitDecoratorMetadata": true, 
     "experimentalDecorators": true, 
     "removeComments": false, 
     "noImplicitAny": false, 
     "module": "system", 
     "target": "es5", 
     "moduleResolution": "classic", 
     "typeRoots": [ 
      "node_modules/@types/", 
      "./custom-types/", 
      "custom-types/", 
      "../custom-types/", 
      "../../custom-types/", 
      "../../../custom-types/" 
     ], 
     "types": [ 
      "angular-ui-router", 
      "angular", 
      "angular-mocks", 
      "jquery", 
      "jasmine", 
      "moment", 
      "es6-shim" 
     ] 
    }, 
    "compileOnSave": false, 
    "filesGlob": [ 
     "custom-types/**/*.ts", 
     "src/**/*.ts", 
     "src/**/*.tsx", 
     "!jspm_packages/**", 
     "!node_modules/**" 
    ] 
} 

回答

5

我已經在TypeScript(IntelliJ)中使用moment,沒有額外的工作來爲它安裝類型。

以下是相關配置:

  • tsconfig.json
    • "moduleResolution": "Node"
    • 在所有
  • ./package.json沒有"types"部分沒有@types/moment
  • ./node_modules/moment/
    • ./moment.d.ts存在
    • ./package.json"typings": "./moment.d.ts"
    • ./package.json"version": "2.14.1"

當我切換回"moduleResolution": "Classic",打字稿說:cannot find module 'moment'。所以這可能是罪魁禍首。

+0

工作!非常感謝 – valepu

+1

非常感謝!找到'tsconfig.json'的正確設置有時候就像解決魔方的問題一樣。 –

+0

謝謝! ''moduleResolution「:」node「'做了一部分技巧,但在我的情況下,我還必須設置''allowSyntheticDefaultImports」:true'。 –

相關問題