将插件方法添加到 Moment .js Flow 中的声明



有没有办法使用 Flow 扩展/添加到现有声明?

具体来说,在本例中,我们同时使用 Moment.js 和一个向 Duration 对象添加格式方法的插件。

我在 FlowInterfaces 上找到了 momentjs 的第三方类型声明,但(自然)它没有插件提供的额外方法。

目前为了解决这个问题,我已经复制了整个声明文件,并为新方法添加了一行,但理想情况下,有一种方法可以更新现有声明,例如:

type moment$MomentOptions += {
    format(format: ?string): string; // moment-duration-format
}

。但语法更好:)

所以我的问题是 Flow 存在这样的事情吗?

可悲的是,在不覆盖整个定义的情况下,这目前是不可能的。

目前,您还可以扩展moment$Moment并在项目中使用此类型。但它需要投射大部分结果。因此,不确定这是否是更好的解决方案;但在某些情况下可能会有所帮助。

declare class moment$MyMoment extends moment$Moment {
  format(format: ?string): string;
}
function fn(m: moment$MyMoment) {
  m.format(''); // OK
}
const m = ((moment(new Date()): any): moment$MyMoment);
fn(m); // OK

最新更新