Typescript中的泛型转换

威科

我正在尝试在TypeScript中创建一个简单的通用find函数,方法如下:

export function findFirst<T, U>(
        array: T[], 
        predicate: (item: T) => boolean, 
        selector?: (item: T) => U): U {
     ...
}

因此,我的参数是:
-要过滤的数组
-测试每个元素的谓词
-选择器以获取返回值

我想做的是提供一个默认的选择器,即如果没有提供选择器,则只返回整个值,即:

if (typeof selector === "undefined")
    selector = (x) => x;

但是,这(或什至(x) => <U>x)破坏了函数的通用定义。如何在不删除通用参数的情况下实现默认选择器?


如果我使用如下代码:

var arr = [1,2,3,4];
var even = findFirst(arr, x => x % 2 === 0);

即返回第一个偶数,它推断y的类型为{}ieobject而不是数字。看来,由于只能从selector参数中推断出U(在这种情况下是未定义的),因此U默认为object我知道我对类型推断的要求太多了,但是有什么办法解决吗?

巴萨拉特

这是完整的代码:

export function findFirst<T, U>(
        array: T[], 
        predicate: (item: T) => boolean, 
        selector: (item: T) => U = (x:T)=> <U><any>x): U {
     return array.filter(predicate).map(selector)[0];
}

原因<U><any>当T是U的子类型或U是T的子类型时,T才能将类型断言为类型。由于这是不确定的,因此需要先转换为,然后才能断言为U <any> <U>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Typescript推断泛型中的泛型

来自分类Dev

强制泛型在TypeScript中实现属性(约束泛型)

来自分类Dev

转换Java中阶与泛型

来自分类Dev

C#中的泛型类型转换

来自分类Dev

Typescript中的泛型是什么?

来自分类Dev

Typescript中的默认泛型类型派生

来自分类Dev

TypeScript中泛型的深度条件类型

来自分类Dev

嵌套TypeScript函数中的泛型

来自分类Dev

Typescript中泛型格式的歧义

来自分类Dev

在 TypeScript 的嵌套泛型中创建实例

来自分类Dev

TypeScript 中的泛型类型继承

来自分类Dev

在 TypeScript 泛型方法中将变量转换为 T?

来自分类Dev

使用泛型和构造函数的 TypeScript 类型转换?

来自分类Dev

转换为泛型

来自分类Dev

Java泛型转换

来自分类Dev

正确转换泛型

来自分类Dev

泛型类型的转换

来自分类Dev

泛型数组转换

来自分类Dev

转换泛型类型

来自分类Dev

从泛型转换为泛型

来自分类Dev

泛型类型推断的 Typescript 泛型

来自分类Dev

在Typescript中的泛型类中初始化泛型类型

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

通过TypeScript中的另一个泛型类型保留泛型类型

来自分类Dev

C#转换为接口泛型中的对象

来自分类Dev

F#中的算术转换为泛型

来自分类Dev

将泛型方法中的枚举值转换为int

来自分类Dev

C#转换为接口泛型中的对象

来自分类Dev

在C#中强制转换为任何类型的泛型