如何使用 Typescript 2.0 扩展下划线
How to extend underscore using Typescript 2.0
我有以下代码片段来使用求和函数扩展下划线
//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() 给我“ 属性 'sum' 在类型 'UnderscoreStatic' 上不存在。
好吧,谁能告诉我正确的做法?
typescript 需要声明的定义,而 sum() 未知。您是否尝试过将下划线扩展为 class 并将 sum 声明为静态方法?
然后导出新的扩展下划线 class 以用于您的应用程序?
编辑;
Underscore 没有构造函数,因此您必须扩展接口并混合您的更改和 return 新接口,如下所示:
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])
);
在进一步查找之后,您还可以使用全局增强来解决您的问题 (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); }
});
因为你的 underscore 混入必须至少 运行 一次,所以你必须尽早 include/require 这个修改,但是你可以在混入后正常使用 underscore 包。
我有以下代码片段来使用求和函数扩展下划线
//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() 给我“ 属性 'sum' 在类型 'UnderscoreStatic' 上不存在。
好吧,谁能告诉我正确的做法?
typescript 需要声明的定义,而 sum() 未知。您是否尝试过将下划线扩展为 class 并将 sum 声明为静态方法?
然后导出新的扩展下划线 class 以用于您的应用程序?
编辑; Underscore 没有构造函数,因此您必须扩展接口并混合您的更改和 return 新接口,如下所示:
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])
);
在进一步查找之后,您还可以使用全局增强来解决您的问题 (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); }
});
因为你的 underscore 混入必须至少 运行 一次,所以你必须尽早 include/require 这个修改,但是你可以在混入后正常使用 underscore 包。