前端知库

泛型解决了什么问题?如何约束泛型?

在复用逻辑的同时,保留参数与返回值之间的类型关系。

参考答案

泛型用类型参数表达输入与输出的关系,避免把类型信息丢失为 any。约束用于说明类型参数至少需要满足的条件。

TypeScript
function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}
const user = { name: "Lin", age: 24 };
getProperty(user, "age"); // 返回值类型为 number
// getProperty(user, "missing"); // 类型错误

设计泛型时,应让类型参数对应真实的类型关系。只有一次使用、无法表达关系的泛型,可能可以简化为具体类型或 unknown。