有没有办法使用 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