TypeScript keyof

发布时间 2023-11-14 11:21:47作者: Tsunami黄嵩粟

keyof 是 TypeScript 中的一个关键字,用于获取一个类型的所有键(属性名)构成的联合类型。它主要用于在类型系统中引用对象类型的键。

以下是一些 keyof 的用法和示例:

1. 获取对象类型的键:

type Person = {
  name: string;
  age: number;
};

type KeysOfPerson = keyof Person;

// KeysOfPerson 的类型为 "name" | "age"

在这个例子中,keyof Person 返回的是字符串字面量类型 "name" | "age",表示 Person 对象类型的所有键。

2. 用于函数参数类型的推断:

type Person = {
  name: string;
  age: number;
};

function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

const person: Person = {
  name: "John",
  age: 30
};

const personName: string = getProperty(person, "name");
const personAge: number = getProperty(person, "age");

在这个例子中,K extends keyof T 表示 K 必须是类型 T 的键。这样,在函数中使用 T[K] 就能够获取对象 obj 中键为 key 的属性的类型。

3. 类型安全的属性访问:

type Person = {
  name: string;
  age: number;
};

function logProperty<T, K extends keyof T>(obj: T, key: K): void {
  console.log(obj[key]);
}

const person: Person = {
  name: "John",
  age: 30
};

logProperty(person, "name"); // 输出: John
logProperty(person, "age");  // 输出: 30
logProperty(person, "address"); // Error: "address" 不是 Person 的键

在这个例子中,使用 keyof 进行属性访问,使得在编译时就能够捕获可能的错误,例如尝试访问不存在的属性。

总的来说,keyof 是 TypeScript 中用于处理对象类型键的一种强大的工具,它在很多情况下能够提高代码的类型安全性。