visual-studio-2015 - 使用 Typescript 2.0 的 MomentJS 类型定义

标签 visual-studio-2015 momentjs typescript2.0

好的,我关于 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");但这在您的设置中可能是不可能的,除非您正在运行 browserifyrequirejs转换 CommonJS/AMD -style 需要浏览器支持的东西。

关于visual-studio-2015 - 使用 Typescript 2.0 的 MomentJS 类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40166938/

相关文章:

angular - typescript : Can't instantiate object using object literals when a function exists in the class

oop - 如何使用接口(interface)获取对象的子集?

mysql - Visual Studio 2015 报表设计器嵌套数据

visual-studio-2015 - Windows 10 应用程序无法在 Visual Studio 2015 RTM 上加载

c# - 如何找到字符串中的最后一个字母并获取其索引?

javascript - 是否可以在 redux react 中存储 moment js 对象?

javascript - 当本地机器时间错误时,时刻无法获得正确的时间

c++ - VS 2015 的 HYPRE blas 构建错误

javascript - 将人性化字符串转换为日期 moment.js

typescript - 从类型中删除 undefined