‘’K extends keyof T‘’是一种用于泛型约束的语法。它的意思是K必须是类型T的键(属性名称)之一。这个约束确保了在使用泛型函数或类型时,K的值只能是T类型的属性名称,从而提高类型安全性。 //泛型函数,K 必须是 T 的键之一functiongetProperty<T, K extends keyof T>(obj: T, key: K): T[K] {return...
functionget<T extendsobject, K extends keyof T>(o: T, name: K): T[K] {returno[name]} 2.必填&部分&选择 既然知道了keyof,就可以用它对属性做一些扩展,比如实现Partial和Pick,Pick一般用在_.pick中 typePartial<T> = {[Pinkeyof T]?: T[P];}; ty...
*/type Pick<T,KextendskeyofT>={[PinK]:T[P];}; Pick 接受两个类型 T 和 K,K 必须为 T 对象的 key 组成的联合类型的子类型。 { [P in K]: T[P]; }是对类型进行重映射,这里的P in K表示遍历 K(K 是遍历类型),然后作为重映射类型的新 key,并且将T[P]作为值。 关于Mapped Types(重映射)...
有了keyof,咱们现在可以改进prop函数的类型注解。我们不再希望接受任意字符串作为key参数。相反,咱们要求参数key实际存在于传入的对象的类型上 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 functionprop<T,KextendskeyofT>(obj:T,key:K){returnobj[key]} TypeScript 现在以推断prop函数的返回类型为...
function useKey<T, K extends keyof T>(o: T, k: K) { var name: string = k; // Type 'string | number | symbol' is not assignable to type 'string'.} 如果你确定只使用字符串类型的属性名,你可以这样写:function useKey<T, K extends Extract<keyof T, string>>(o: T, k: K)...
4、keyof用法 一、映射类型语法及示例 1、映射类型语法 代码如下(示例): AI检测代码解析 // 映射类型语法 // { readonly [P in K]?: T} // { [P in K]: T} // { [P in K]?: T} // { [P in K]-?: T} // { readonly [P in K]: T} ...
在这个例子中,K extends keyof T表示K必须是类型T的键。这样,在函数中使用T[K]就能够获取对象obj中键为key的属性的类型。 3. 类型安全的属性访问: type Person ={ name: string; age: number; };functionlogProperty<T, K extends keyof T>(obj: T, key: K):void{ ...
function reverse<T>(array: T[]): T[] { return array.reverse(); } 在这个例子中,我们定义了一个泛型函数reverse,接受一个数组参数,并返回反转后的数组。泛型类型T用于指定数组的元素类型。 例如: let numbers: number[] = [1, 2, 3, 4, 5]; ...
type Pick<T, K extends keyof T> = { [P in K]: T[P]; }; 首先我们看等号左侧的<T, K extends keyof T>,类型参数有两个,T 和 K。 先说类型参数命名。 类型变量命名和写 JS 变量一样,随意起名。但建议首字母大写,以防止和一些关键字混淆(比如 extends, as, infer),这些关键词都是小写的。
使用KeyOf 运算符应用约束 在Type 中,keyof 运算符常用于在泛型函数中应用约束。让我们通过一个例子来详细了解这种用法: function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] { return obj[key]; } 上面的函数使用了泛型来定义一个对象属性的类型。keyof T 返回的是字符串字面量类型的联...