【发布时间】:2020-08-03 17:53:48
【问题描述】:
我试图了解 Typescript 泛型在现实生活案例中的常用用途,而不是小众案例。我知道它为函数/类/接口添加了额外的抽象层,以便它们可以在不同的情况下重用,但我觉得您通常可以使用联合和交集类型来适应一定程度的通用性。
但是,举个例子:
interface Identities<V, W> {
id1: V,
id2: W
}
function identities<T, U> (arg1: T, arg2: U): Identities<T, U> {
let identities: Identities<T, U> = {
id1: arg1,
id2: arg2
};
return identities;
}
所有这些都确保无论参数具有什么类型,返回值都必须与类型匹配。
我可以想象,如果您希望您的函数/类能够容纳各种不同的参数,但您唯一的限制是它们必须与某些方法兼容:
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length); // Now we know it has a .length property, so no more error
return arg;
}
这在某些情况下使用。
【问题讨论】:
-
您在寻找示例吗?一个常见的例子是。对于 React,当我们将接口/类型别名定义为组件的泛型类型时。
-
在创建框架时很有用,例如@wentjun 提到的。此外,当您尝试定义自己的数组函数(例如合并排序)时,它也很有用。
标签: javascript typescript typescript-generics