TS中 keyof any的结果是

196 阅读1分钟

在 TypeScript 中,keyof any 是一个特殊的用法,它的类型表现为 string | number | symbol。这是因为在 JavaScript 中,对象的键可以是字符串、数字或者是符号(symbol)。keyof any 表达的意思是“任意类型的键”。

解释 keyof any

当使用 keyof 关键字对任意类型(any)进行操作时,TypeScript 会解释为该类型可以拥有的所有可能键的类型。由于 any 类型基本上取消了类型检查,提供了无限制的自由,所以 keyof any 反映了对象属性键可以是这三种基本类型之一:

  • string:JavaScript 中最常见的键类型。
  • number:虽然在访问时 JavaScript 会将数字键转换为字符串,但数组和类似数组的对象使用数字索引。
  • symbol:ES6 引入的符号类型,主要用于创建唯一的对象键。
```function getProperty<T>(obj: T, key: keyof any): any {
  return obj[key];  // 注意这里,由于key是 keyof any,这意味着key可以是任意的string, number或symbol
}

const data = {
  name: "Alice",
  age: 25,
  [Symbol.iterator]: function* () {
    yield* [this.name, this.age];
  }
};

const name = getProperty(data, "name");  // 正常运作
const age = getProperty(data, 1);        // TypeScript不会报错,因为keyof any包括number
const iterator = getProperty(data, Symbol.iterator);  // 正常运作