我发现了这段代码 -
type Record<K extends keyof any, T> = {
[P in K]: T;
};
在这里,我理解 T> 是一种通用的类型断言。
有人能解释一下 K 是什么吗? 还请解释一下这个函数返回的内容和示例输入/输出?
感谢您的期待。
type Record<K extends keyof any, T> = {
[P in K]: T;
};
在这里,我理解 T> 是一种通用的类型断言。
有人能解释一下 K 是什么吗? 还请解释一下这个函数返回的内容和示例输入/输出?
感谢您的期待。
keyof
返回一个类型的所有键的并集。type BadVector = { x: string, y: boolean }
keyof BadVector // "x" | "y"
所以,K extends keyof any
表示 K
是一个联合类型的键。例如,类型 keyof BadVector
将扩展为 keyof any
。
其次,映射类型(mapped type) 可将对象的所有键映射到一个新值类型。因此,[P in K]: T
的意思是:将 K
中的每个属性 P
映射到值类型 T
。
例如,看看文档中的示例:
interface CatInfo {
age: number;
breed: string;
}
type CatName = "miffy" | "boris" | "mordred";
const cats: Record<CatName, CatInfo> = {
miffy: { age: 10, breed: "Persian" },
boris: { age: 5, breed: "Maine Coon" },
mordred: { age: 16, breed: "British Shorthair" },
};
cats
的类型是 Record<CatName, CatInfo>
。这意味着对于 CatName
中的所有类型,都必须提供一个类型为 CatInfo
的值。
keyof any
的子集是any
,即键只能是字符串、数字或符号。因此,类型keyof any
是string | number | symbol
。 - aderchox