当前位置:  开发笔记 > 编程语言 > 正文

moment().add()仅适用于文字值

如何解决《moment().add()仅适用于文字值》经验,为你挑选了1个好方法。

我在TypeScript中使用Moment.js(如果重要的话,在Angular 2下).当我使用带有文字值的add()方法作为参数时,它工作正常:

moment().add(1, 'month');

但是,如果我尝试用字符串替换单位,它将失败:

let units:string = 'month';
moment().add(1, units);

有这个错误:

Argument of type '1' is not assignable to parameter of type 'DurationConstructor'.

我在这做错了什么?



1> Aleksey L...:

不推荐的反向过载add(unit: unitOfTime.DurationConstructor, amount: number|string)会产生歧义.

您可以通过定义类型的解决这个问题的unitsDurationConstructor不是string:

let units: moment.unitOfTime.DurationConstructor = 'month';
moment().add(1, units);


`DurationConstructor`是一个字符串文字类型的联合(比如`type Foo ='month'|'week'| ...`),它可以防止你将无效/不支持的字符串作为单位参数传递.所以你最好将函数签名更改为`addOneUnit(date:Date,units:moment.unitOfTime.DurationConstructor)`.另一种选择是使用类型断言(`units as moment.unitOfTime.DurationConstructor`) - 但是你将失去类型安全性.
推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有