【问题标题】:Using moment with Typescript 1.8 and ES6在 Typescript 1.8 和 ES6 中使用 moment
【发布时间】:2016-07-11 00:06:26
【问题描述】:

我通过打字安装了时刻定义文件:

typings install moment --save

到目前为止一切顺利,但是当我通过以下方式导入定义时:

import * as moment from 'moment';

所有编译都很好,但是当我运行我的应用程序时,我收到了运行时错误:

Uncaught TypeError: moment is not a function

moment库究竟应该如何导入?

如果我改为使用:

const moment = require('moment');

一切正常,但我失去了所有类型安全性。

我的tsconfig.json

{
  "compilerOptions": {
    "jsx": "preserve",
    "target": "ES6",
    "declaration": false,
    "module": "es2015",
    "experimentalDecorators": true,
    "sourceMap": true,
    "noLib": false,
  },
  "exclude": [
    "node_modules",
    "meteor_core",
    "typings/browser",
    "typings/browser.d.ts"
  ]
}

任何帮助将不胜感激。

【问题讨论】:

  • 你如何引用/导入你的定义文件(打字文件夹)?
  • 请发布您的tsconfig.json
  • 引用是由typings模块完成的,它创建了两个主要的定义文件:broswer.d.ts和main.d.ts。对于所有其他提供类型的 npm 包,它可以正常工作。

标签: typescript typescript1.8


【解决方案1】:

我正在使用 VSCode 来测试您的示例,并且我注意到您的 tsconfig.json 有一个额外的,

在“noLib”之后:假,

我已经删除它,重新启动 VSCode 并且它正在使用:

import * as moment from 'moment';
console.log(moment().startOf('day'));

【讨论】:

  • 是的,这是我帖子中的一种类型,但即便如此,我也会遇到同样的错误。它编译得很好,但在运行时 int 失败:TypeError: moment is not a function
  • 好的,现在问题出在运行时。你在打包你的文件吗?如果没有,您是否在页面中包含了 moment.js 文件?
  • 是的,如果我用const moment = require('moment');“导入”它,一切正常。对于我们使用的任何其他库,它只适用于我们遇到此问题的时刻的类型定义文件。
  • 查看本文的CommonJS库部分,也许它会帮助你理解。 jbrantly.com/es6-modules-with-typescript-and-webpack
猜你喜欢
  • 2015-08-17
  • 2020-11-16
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 2017-12-23
  • 2016-11-11
  • 1970-01-01
相关资源
最近更新 更多