使用moment配合TypeScript 1.8和ES6

3
我通过typings安装了moment的定义文件:
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"
  ]
}

非常感谢您的帮助。


1
你如何引用/导入你的定义文件(typings文件夹)? - Manu Artero
请发布您的 tsconfig.json 文件。 - Fidan Hakaj
参考是由typings模块完成的,它创建了两个主要的定义文件:broswer.d.ts和main.d.ts。对于所有其他npm包提供的类型,它都可以正常工作,没有问题。 - Aranir
1个回答

0

我正在使用VSCode测试您的示例,据我所知,您的tsconfig.json中多了一个逗号,

就在“noLib”:false之后,

我已将其删除,重新启动VSCode,现在可以正常运行:

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

是的,我的帖子中有一个错误,但即使如此,我仍然遇到了相同的错误。 它可以编译通过,但在运行时会出现以下错误: “TypeError:moment不是函数” - Aranir
好的,现在问题出在运行时。你是否打包了你的文件?如果没有,你是否在页面中包含了moment.js文件? - thitemple
是的,如果我使用 const moment = require('moment'); 导入它,一切都可以正常工作。对于我们使用的任何其他库,都可以正常工作,只有在使用 moment 的类型定义文件时才会遇到此问题。 - Aranir
请查看本文的CommonJS库部分,或许能帮助您理解。http://www.jbrantly.com/es6-modules-with-typescript-and-webpack/ - thitemple

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接