我有以下片段用sum函数扩展下划线
//underscore.extension.ts
import * as _ from "underscore"
declare module "underscore" {
export interface UnderscoreStatic {
sum(items: number[]): number;
}
}
_.mixin({
sum: items => { return _.reduce<number, number>(items, function (s, x) { return s + x; }, 0); }
});
但是,使用_。 sum ()会给我&#34;财产&#39;总和&#39;类型&#39; UnderscoreStatic&#39;中不存在。
嗯,有人告诉我这样做的正确方法吗?
答案 0 :(得分:0)
typescript需要声明的定义,而sum()是未知的。您是否尝试将下划线扩展为类并将sum声明为静态方法?
然后导出您的新扩展下划线类以在您的应用程序周围使用?
EDIT; Underscore没有构造函数,所以你必须扩展接口并混合你的更改并返回这样的新界面:
import * as _ from 'underscore';
interface UnderscoreExtended extends UnderscoreStatic {
sum(items: number[]): number;
}
_.mixin({
sum: items => { return _.reduce<number, number>(items, function (s, x) { return s + x; }, 0); }
});
export { UnderscoreExtended } // as UnderscoreStatic }
export default _ as UnderscoreExtended;
在您的项目中,您可以导入此扩展下划线并正常使用
import _ from '<your file containing extended underscore>';
_.isNumber(
_.sum([1, 2])
);
答案 1 :(得分:0)
在查看了这一点之后,您还可以通过全局扩充来解决您的问题(https://www.typescriptlang.org/docs/handbook/declaration-merging.html#global-augmentation)
import * as _ from "underscore"
declare global {
interface UnderscoreStatic {
sum(items: number[]): number;
}
}
_.mixin({
sum: items => { return _.reduce<number, number>(items, function (s, x) { return s + x; }, 0); }
});
由于你的mixin到下划线必须至少运行一次,你必须尽早包含/要求这个修改,但是你可以在混合后使用下划线包。