Angular 如何在TypeScript中使用momentjs

Angular 如何在TypeScript中使用momentjs,angular,typescript,momentjs,Angular,Typescript,Momentjs,我有一个项目,我想使用momentjsversion2.20.1 我接着介绍了如何安装TypeScript,在大多数情况下,一切都正常工作。当我使用ng test测试我的库时,我没有问题,但是当我尝试用npm run build打包库时,我得到了 无法调用命名空间('时刻') 使用import*作为“矩”的矩时。我得到 矩没有默认的导出 使用从“力矩”导入力矩时和设置“allowSyntheticDefaultImports”:true 如何正确安装和使用momentjs?试试 import *

我有一个项目,我想使用
momentjs
version
2.20.1

我接着介绍了如何安装TypeScript,在大多数情况下,一切都正常工作。当我使用
ng test
测试我的库时,我没有问题,但是当我尝试用
npm run build
打包库时,我得到了

无法调用命名空间('时刻')

使用
import*作为“矩”的矩时。我得到

矩没有默认的导出

使用
从“力矩”导入力矩时和设置
“allowSyntheticDefaultImports”:true

如何正确安装和使用
momentjs

试试

import * as moment_ from 'moment';
const moment = moment_;

如果要使用公共变换管道方法,请参见:

import { DateFormatPipe } from "angular2-moment";
constructor(public dfp: DateFormatPipe) { }
var date = this.dfp.transform(value, 'DD/MM/YYYY');

我通过导入
时刻
解决了这个问题(感谢@adejones

这导致了成功的构建。但我犯了个错误

力矩不是一个函数

从其他Angular 5应用程序使用我的库时。我通过添加

"lib": {
    "externals": {
        "moment": "moment"
    }
}
到我的Angular 5库中的
ng package.json
,并添加了

"dependencies": {
    "moment": "2.20.1"
}
到我的Angular 5应用程序的
package.json

正如felix在这里提到的-用于打字脚本

import moment from 'moment/src/moment';

您可以将
momentjs
添加到您的
包中。json
依赖项:

"dependencies": {
    ...
    "moment": "2.20.1",
    ...
}
然后可以按如下方式使用力矩:

import * as moment from "moment";

export class DateThingy {

     public getDate(): moment.Moment { 
        return moment();
     }
}

额外导入

或者你甚至可以为打字做额外的导入

import { Moment } from 'moment'; // Import the moment typings
import * as moment from 'moment'; // Import the moment functions (and typings)
然后您可以将其用作:

export class DateThingy {
     public getDate(): Moment { 
        return moment();
     }
}

这在npm安装@types/moment中也有解释--save@Nour运行该命令时,它说
Moment提供了自己的类型定义,所以您不需要安装@types/Moment。不是这样的。您可以按照文档中的说明安装momente.js并将链接添加到.angular-cli.json中,但在组件中使用之前,您必须声明它。例如,声明:任何;奇怪的是,这起作用了,谢谢如果有更好的解决方案,我会等一等。
export class DateThingy {
     public getDate(): Moment { 
        return moment();
     }
}