ts的keyof typeof

0 阅读1分钟
  • keyof 操作符:

    • 获取对象类型的所有键的联合类型
    • 用于获取对象类型的键集合
      • 基本用法
      interface Person {
          name: string;
          age: number;
          address: string;
      }
      
      type PersonKeys = keyof Person; // "name" | "age" | "address"
      
      • 使用示例
      function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
          return obj[key];
      }
      
      const person: Person = {
          name: "John",
          age: 30,
          address: "New York"
      };
      
      const name = getProperty(person, "name"); // 类型安全
      const age = getProperty(person, "age"); // 类型安全
      
  • typeof操作符

    • 获取变量或表达式的类型
    • 用于从值中提取类型
    // 基本用法
    const colors = {
      red: "#FF0000",
      green: "#00FF00",
      blue: "#0000FF"
    };
    
    type ColorType = typeof colors;
    // 等价于:
    // type ColorType = {
    //   red: string;
    //   green: string;
    //   blue: string;
    // }
    
    // 使用示例
    const colorKeys: keyof typeof colors = "red"; // 类型安全
    
  • 组合使用

    // 获取对象键的类型
    const user = {
      name: "John",
      age: 30
    };
    
    type UserKeys = keyof typeof user; // "name" | "age"
    
    // 函数参数类型
    function updateUser<K extends keyof typeof user>(
      key: K,
      value: typeof user[K]
    ) {
      user[key] = value;
    }
    
    updateUser("name", "Jane"); // 正确
    updateUser("age", 25);     // 正确
    updateUser("name", 123);   // 错误:类型不匹配