typescript - 可管道函数的打字稿推理
问题描述
我正在开发一个包装数组并创建可管道过滤器函数的类。
但是,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);
推荐阅读
- javascript - 如何将数据保存在 saga 的本地存储中?
- javascript - 表格的粘性标题
- java - 复制在 Go 中创建的 CRL
- import - 导入 Fortran 无格式二进制文件
- apache-kafka - Kafka 在哪里存储默认的 Broker 级别配置?
- laravel-5 - 无法禁用persistent_menu
- azure - Azure Active Directory - 在 java 中设置令牌到期
- php - POST /wp-admin/admin-ajax.php 400(错误请求)
- typescript - Typescript 泛型类型推断是更改对象形状后函数的“任意”
- python-3.x - 如何使用 Python Selenium 登录 gmail