Keyof 也是 T 类型

typescript

1个回答

写回答

qwe970630

2025-07-09 16:55

+ 关注

typescript
typescript

typescript 中,有一个非常有用的类型操作符,称为 Keyof。这个操作符可以用来获取一个类型 T 的所有属性名,并将它们作为联合类型返回。换句话说,Keyof 也是 T 类型本身。

使用 Keyof 可以方便地操作类型的属性,从而实现更灵活和可靠的编程。下面我们将详细介绍 Keyof 的用法,并提供一些示例代码来帮助理解。

获取类型的属性名

首先,让我们来看一个简单的例子,演示如何使用 Keyof 来获取一个类型的属性名。假设我们有一个名为 Person 的接口,定义了一个人的基本信息:

typescript

interface Person {

name: string;

age: number;

gender: string;

}

现在,我们可以使用 Keyof 来获取 Person 类型的所有属性名:

typescript

type PersonKeys = keyof Person;

// PersonKeys 的类型为 "name" | "age" | "gender"

通过使用 Keyof,我们成功地将 Person 类型的属性名作为联合类型返回了。这样,在后续的代码中,我们就可以使用 PersonKeys 来限制某个变量只能是 Person 类型的属性名。

使用 Keyof 进行属性访问

除了获取属性名,Keyof 还可以用于属性访问。假设我们有一个叫做 person 的变量,类型为 Person,我们可以使用 Keyof 来访问 person 的属性:

typescript

const person: Person = {

name: "Alice",

age: 25,

gender: "female",

};

function getProperty(obj: Person, key: keyof Person) {

return obj[key];

}

const name = getProperty(person, "name"); // 返回 "Alice"

const age = getProperty(person, "age"); // 返回 25

const gender = getProperty(person, "gender"); // 返回 "female"

在上面的代码中,我们定义了一个名为 getProperty 的函数,接收一个对象和一个属性名作为参数,并返回属性对应的值。通过使用 keyof Person,我们可以将属性名的类型限制为 Person 类型的属性名,从而确保只能访问有效的属性。

使用 Keyof 进行属性过滤

除了上述用法,Keyof 还可以用于属性过滤。假设我们有一个对象数组,我们想要从中筛选出指定属性的对象。这时,Keyof 可以帮助我们实现这个需求:

typescript

const people: Person[] = [

{ name: "Alice", age: 25, gender: "female" },

{ name: "Bob", age: 30, gender: "male" },

{ name: "Charlie", age: 35, gender: "male" },

];

function filterByProperty(

array: Person[],

key: keyof Person,

value: Person[typeof key]

): Person[] {

return array.filter((item) => item[key] === value);

}

const females = filterByProperty(people, "gender", "female");

// 返回 [{ name: "Alice", age: 25, gender: "female" }]

在上面的代码中,我们定义了一个名为 filterByProperty 的函数,接收一个对象数组、一个属性名和一个属性值作为参数,并返回符合条件的对象数组。通过使用 keyof Person 和 Person[typeof key],我们可以将属性名的类型限制为 Person 类型的属性名,并获取属性对应的值的类型。这样,我们就能够根据指定的属性名和属性值进行过滤操作。

通过使用 Keyof,我们可以方便地获取一个类型的所有属性名,并将它们作为联合类型使用。这使得我们可以更灵活地操作类型的属性,从而实现更可靠和安全的编程。无论是用于属性访问、属性过滤还是其他用途,Keyof 都是 typescript 中非常有用的一个类型操作符。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号