2017-04-14 47 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'。 –

相关问题