【问题标题】:How to use momentjs in TypeScript如何在 TypeScript 中使用 momentjs
【发布时间】:2018-02-07 08:56:26
【问题描述】:

我有一个Angular 5 library 项目,我想使用momentjs 版本2.20.1

我关注moment docs 了解如何为 TypeScript 安装,并且在大多数情况下一切正常。当我使用ng test 测试我的库时,我没有问题但是当我尝试使用npm run build 打包库时,我得到了

不能调用命名空间('moment')

使用import * as moment from 'moment'; 时。我得到了

moment 没有默认导出。

当使用import moment from 'moment'; 并设置"allowSyntheticDefaultImports": true

如何正确安装和使用momentjs

【问题讨论】:

  • npm install @types/moment --save
  • @Nour 运行该命令时,它显示Moment provides its own type definitions, so you don't need @types/moment installed!。所以不是这样。
  • 您可以按照文档中的说明安装 moment.js 并将链接添加到 .angular-cli.json 但在您的组件中使用之前,您必须声明它。例如。声明让时刻:任何;

标签: angular typescript momentjs


【解决方案1】:

试试……

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

https://github.com/jvandemo/generator-angular2-library/issues/221

【讨论】:

  • 奇怪的是,谢谢。 :/ 如果有人有更好的解决方案,请稍等。
【解决方案2】:

我通过使用 导入 moment 解决了这个问题(感谢 @adejones

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

这导致成功构建。但是我遇到了一个错误

时刻不是函数

从另一个 Angular 5 应用程序使用我的库时。我通过添加解决了那个问题

"lib": {
    "externals": {
        "moment": "moment"
    }
}

到我的 Angular 5 库中的 ng-package.json 并添加

"dependencies": {
    "moment": "2.20.1"
}

到我的 Angular 5 应用程序的 package.json

【讨论】:

    【解决方案3】:

    如果你想使用常见的变换管道方法使用:

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

    【讨论】:

      【解决方案4】:

      https://github.com/moment/moment/issues/2608#issuecomment-170739817

      正如 felix 在这里提到的 - 用于 TypeScript

      import moment from 'moment/src/moment';
      

      【讨论】:

        【解决方案5】:

        您可以将momentjs 添加到您的package.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();
             }
        }
        

        这在this question中也有解释

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-03
          • 1970-01-01
          • 1970-01-01
          • 2017-07-19
          • 2017-12-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多