这是一个有趣的挑战。我正在阅读 TypeScript github 中的这个旧问题,以支持使用类似于 C# 的扩展方法。提出了两种主要方法,一种是添加语法糖来扩展经常不受欢迎的对象原型,另一种是重写调用站点(请参阅此处的缺点和优点)。
我在想也许我们可以用另一种方式来模拟在 JavaScript 中也可以使用的扩展方法。
假设我们有以下功能:
function includesAnyOf<T>(array: T[], ...searchElements: T[]) {
return searchElements.some(_ => array.includes(_));
}
// example:
const a = [1, 2, 3];
const b = 3;
includesAnyOf(a, b); // true
// as extension method it would look like:
// a.includesAnyOf(b);
现在我想实现功能,ext以便我可以:
ext(a).includesAnyOf(b)
ext(a)(_ => _.includesAnyOf(b));
保留参数的所有类型。我想知道这是否可能,但我从这个开始,不知道如何完成它!
function ext(obj: any) {
return {
includesAnyOf: (...args: any[]) => includesAnyOf(...???)
};
}
我认为这是一个有趣的挑战,您认为如何实现,以及如何推广它,或者您能想到更好的方法吗?
不负相思意
慕工程0101907
相关分类