可管道函数的Typescript推理



我正在开发一个类,它封装一个Array并创建一个可管道过滤函数。

但是,Typescript推理不适用于谓词函数。我认为这与一般作用域有关,有没有办法解决这个限制?

class SomeClass<T> {
constructor(public arr: Array<T>) {}
}
function filter <R> (fn: (r: R) => boolean) {
return function (obj: SomeClass<R>) : SomeClass<R> {
return new SomeClass(obj.arr.filter(fn));
}
} 
/* How to replace i: unknown with i: number? */
let r = filter (i => i > 2) (new SomeClass([1, 2, 3]))
console.log(r);

您需要将泛型类型传递给函数,还需要使用构造函数初始化一些属性,或者只需将SomeClass更改为一些泛型T的数组。

像这样:

class SomeClass<T> {
constructor(public arr: Array<T>) {}
}
function filter <R> (fn: (r: R) => boolean) {
return function (obj: SomeClass<R>) : SomeClass<R> {
return new SomeClass(obj.arr.filter(fn));
}
} 
/* How to replace i: unknown with i: number? */
let r = filter<number>(i => i >= 2) (new SomeClass([1, 2, 3]))
console.log(r);

最新更新