【问题标题】:Overwriting moment.now() in a typescript application在打字稿应用程序中覆盖 moment.now()
【发布时间】:2017-10-07 21:19:45
【问题描述】:

我的任务是在 Angular2 应用程序中将 MomentJS 与服务器时间同步。

MomentJS 具有更改时间源的功能,如 here 所述

但是 typescript 编译器不允许我覆盖 moment#now() 函数,因为它从 moment.d.ts 中的命名空间作为函数导出,所以我得到了错误。

无法分配给“现在”,因为它是常量或只读属性。

同时,moment.d.ts 有一条评论#now:

//... 为盈利而覆盖

所以我认为我做错了什么。

我使用 angular-cli rc4, MomentJS 2.18.1 并将其导入为

从“时刻”导入*作为时刻;

感谢您的帮助。

【问题讨论】:

  • 如果没有其他问题,您始终可以通过将其转换为 any 来绕过类型检查:(moment as any).now = () => { return 1; }
  • 你是如何尝试在变量中调用函数的?

标签: angular typescript momentjs


【解决方案1】:

“typescript 编译器不允许我覆盖 moment#now() 函数,因为它作为函数从 moment.d.ts 的命名空间中导出,所以我得到了错误。”

这些类型的约束仅是预编译的,这意味着您可以告诉 typescript 基本上忽略并让您通过将其转换为 any 来覆盖。

import * as moment from "moment";

// temporary cast as any to override.
(moment as any).now = () => serverDateTime

// continue with moment intellisense

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 2020-12-22
    • 2020-10-27
    • 1970-01-01
    • 2019-06-20
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    相关资源
    最近更新 更多