我尝试使用它与typescript绑定:
npm install moment --save
typings install moment --ambient -- save
test.ts:
import {moment} from 'moment/moment';
如果没有:
npm install moment --save
test.ts:
var moment = require('moment/moment');
但是当我调用moment.format()时,我得到一个错误。
应该是简单的,谁能提供一个命令行/导入组合,将工作?
对于ANGULAR CLI用户
使用外部库在这里的文档中:
https://github.com/angular/angular-cli/wiki/stories-third-party-lib
Simply install your library via
npm install lib-name --save
and import it in your code. If the library does not include typings,
you can install them using:
npm install lib-name --save
npm install @types/lib-name --save-dev
Then open src/tsconfig.app.json and add it to the types array:
"types":[ "lib-name" ]
If the library you added typings for is only to be used on your e2e
tests, instead use e2e/tsconfig.e2e.json. The same goes for unit tests
and src/tsconfig.spec.json.
If the library doesn't have typings available at @types/, you can
still use it by manually adding typings for it:
First, create a typings.d.ts file in your src/ folder.
This file will be automatically included as global type definition.
Then, in src/typings.d.ts, add the following code:
declare module 'typeless-package';
Finally, in the component or file that uses the library, add the
following code:
import * as typelessPackage from 'typeless-package';
typelessPackage.method();
Done. Note: you might need or find useful to define more typings for
the library that you're trying to use.
Moment是第三方全球资源。moment对象位于浏览器的窗口上。因此,在你的angular2应用中导入它是不正确的。相反,在加载moment.js文件的html中包含<script>标记。
为了让TypeScript满意,你可以添加
declare var moment: any;
在你的文件顶部,你可以使用它来停止编译错误,或者你可以使用
///<reference path="./path/to/moment.d.ts" />
或者使用tsd来安装moment.d.ts文件,TypeScript可以自己找到这个文件。
例子
import {Component} from 'angular2/core';
declare var moment: any;
@Component({
selector: 'example',
template: '<h1>Today is {{today}}</h1>'
})
export class ExampleComponent{
today: string = moment().format('D MMM YYYY');
}
只需确保在html中添加script标签,否则moment将不存在。
<script src="node_modules/moment/moment.js" />
模块加载力矩
首先,你需要设置一个模块加载器,比如System.js来加载moment commonjs文件
System.config({
...
packages: {
moment: {
map: 'node_modules/moment/moment.js',
type: 'cjs',
defaultExtension: 'js'
}
}
});
然后将moment导入到需要使用的文件中
import * as moment from 'moment';
or
import moment = require('moment');
编辑:
还有一些捆绑器的选项,如Webpack或SystemJS builder或Browserify,将保持窗口对象的时刻。欲了解更多相关信息,请访问它们各自的网站获取指导。
尝试在tsconfig.json中添加" allowsyntheticdefaulultimports ": true。
国旗的作用是什么?
这基本上是告诉TypeScript编译器,可以使用ES6导入语句,即。
import * as moment from 'moment/moment';
在CommonJS模块上,比如Moment.js,它没有声明默认导出。该标志只影响类型检查,不影响生成的代码。
如果你使用SystemJS作为模块加载器,这是必要的。如果你告诉TS编译器你使用SystemJS,该标志将自动打开:
"module": "system"
如果ide被配置为使用tsconfig.json,这也将删除由它们抛出的任何错误。
2017年4月更新:
从版本2.13.0开始,Moment包含了一个typescript定义文件。https://momentjs.com/docs/#/use-it/typescript/
只要用npm在你的控制台类型中安装它
npm install --save moment
然后在你的Angular应用中,导入就像这样简单:
import * as moment from 'moment';
就是这样,你得到了完全的Typescript支持!
额外编辑:要在Typescript中输入一个变量或属性Moment,你可以这样做,例如:
let myMoment: moment.Moment = moment("someDate");