因此,keyof any 表示了对象key值可能的取值类型。这一点在本文之后的一些类型实现中也会用到。 注意点 遇到索引签名时,keyof会直接返回其类型 type Dog = { [y:number]: number }; type dog = keyof Dog; //type dog = number type Doggy = { [y:string]: boolean }; type doggy = keyof Doggy; ...
无法对 key做约束:可能会犯拼写错误的问题 这时可以使用 keyof 来加强 get 函数的类型功能 function get<T extends object, K extends keyof T>(o: T, name: K): T[K] { return o[name] } 1. 2. 3. 1.2 in in ...
functiongetValue<TextendsObject, Kextendskeyof T>(o: T,key: K): T[K] {returno[key]; }constobj1 = {name:'张三',age:18};consta =getValue(obj1,'hh'); 复制代码 in in用于取联合类型的值。主要用于数组和对象的构造。 typename ='firstName'|'lastName';typeTName = { [key in name]:...
const useMainInventoryStore = <K extends keyof MainState>(key: K) => state.mainSlice[key] 现在输入是泛型类型K,它被约束为keyof MainState。因此,输出是泛型类型ObjectWithMatchingProperties<MainState>[K],一种与state.mainSlice[key]中存在的任何属性相对应的泛型索引访问类型。 现在,当您调用函数时,...
我们可以使用 keyof 来创建一个函数,该函数接受一个 Person 对象和一个键,并返回对应的值: 代码语言:txt 复制 function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } 在这个函数中,T 是任意类型,K 是T 的键的联合类型。函数返回的是 T[K],即 obj[key] 的...
keyof is a keyword in TypeScript which is used to extract the key type from an object type.keyof with explicit keysWhen used on an object type with explicit keys, keyof creates a union type with those keys.ExampleGet your own TypeScript Server interface Person { name: string; age: number...
然后对这个 T 做keyof 操作,用它的 key 来约束类型: // 这个 Partial 能帮助我们取出原始 T 类型结构的部分 key-value 子集 type Partial<T> = { [P in keyof T]?: T[P] | undefined; } class History { // U 的结构被限定成了 T 中所存在的 key-value commit< T extends Element, U extends...
使用KeyOf 运算符应用约束 在TypeScript 中,keyof 运算符常用于在泛型函数中应用约束。让我们通过一个例子来详细了解这种用法: 代码语言:javascript 复制 functiongetProperty<T,KextendskeyofT>(obj:T,key:K):T[K]{returnobj[key];} 上面的函数使用了泛型来定义一个对象属性的类型。keyof T 返回的是字符串字面...
type stringMapDemo = {[key: string]: unknown}; function sampleStringPair(property: keyof stringMapDemo, value: string): stringMapDemo { return {[property]: value}; } 我们定义了一个类型 stringMapDemo,它表示一个对象,其中所有键都是字符串类型,所有值的类型为 unknown。
这个问题似乎跟「P in keyof T」没啥关系。可以写个更简单的case:typeA={a:number}typeB={a:...