好的,我关于 SO 的第一个问题,多么令人兴奋! :)
我正在尝试让 MomentJS 定义与 Typescript 2.0 一起使用。
只需执行 npm install @types/angular --save-dev
,我就可以让 Angular 定义正常工作。 .
然而,MomentJS (2.15.1) 已经带有 moment.d.ts
作为您安装时获得的软件包的一部分。
如果您尝试对角度执行类似的方法,即 npm install @types/moment --save-dev
,这就是你得到的:
npm WARN deprecated @types/moment@2.13.0: This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed!
当然,如果你去
node_modules\@types\moment
,里面没有什么用处。是的,我已经添加了
tsconfig.json
文件在我的根文件夹中,因此 Typescript 2.0 将自动选择 node_modules 上的 @types(这就是 Angular 工作正常的原因),但对于 MomentJS,我收到以下错误(因为 .d.ts 不在 TS2 期望的位置它是):TS2304 Cannot find name 'moment'.
我也尝试玩弄
"typeRoots"
配置 tsconfig.json
没有任何运气。这是我的
package.json
的相关部分:{
"devDependencies": {
"@types/angular": "^1.5.16"
},
"dependencies": {
"moment": "^2.15.1"
}
}
如果这很重要,我正在使用 VS2015。
所以......关于如何让 Typescript 2.0 读取位于“意外”文件夹中的 Moment 类型定义的任何想法?
最佳答案
您会找到 moment.d.ts
文件下 node_modules\moment
因为它与时刻本身打包在一起。
使用 VS 2017 和 TypeScript 2.2,您不必指定 typeRoots
;但是,您的环境可能需要指定其中的两个或多个,例如:typeRoots: [ 'node_modules/@types/', 'node_modules/moment/' ]
^ 我忘了如果每个 @types
子目录需要在 typeRoots
中输入.
这是我在 VS 2017 和 TypeScript 2.2 中使用的过程,对 tsconfig.json
没有任何特殊更改(但这些东西在最近的版本中发生了变化):
它是通过 ES6 样式导入自动找到的:import * as moment from "moment";
这将导入名为 moment
的函数以及命名空间 moment
合并为一个别名。
如果您还想要 Moment
(返回类型)导入,也执行以下操作:import { Moment } from "moment";
在当前moment.d.ts
(2.18.1),否则无法访问此类型。
过去我用过 var moment = require("moment");
但这在您的设置中可能是不可能的,除非您正在运行 browserify
或 requirejs
转换 CommonJS
/AMD
-style 需要浏览器支持的东西。
关于visual-studio-2015 - 使用 Typescript 2.0 的 MomentJS 类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166938/