操作符keyof的作用是什么

keyof 是 TypeScript 中的一个操作符,它用于获取一个类型的所有属性名(键)组成的联合类型。

使用 keyof 操作符可以在编译时获得一个类型的属性名,然后将这些属性名作为联合类型进行处理或操作。它可以用于访问对象的属性,定义映射类型,以及进行类型约束等场景。

下面是一些示例来说明 keyof 的作用:

  1. 访问对象的属性:

  • interface Person {
        name: string;
        age: number;
    }
    
    const person: Person = {
        name: "Alice",
        age: 25,
    };
    
    type PersonKeys = keyof Person; // 联合类型:"name" | "age"
    
    console.log(person["name"]); // 访问对象属性
    

    在上述示例中,PersonKeys 类型通过 keyof Person 获取了 Person 接口的属性名,即 "name""age",作为联合类型。

  • 定义映射类型:

  • interface Person {
        name: string;
        age: number;
    }
    
    type ReadonlyPerson = {
        readonly [K in keyof Person]: Person[K];
    };
    
    const readonlyPerson: ReadonlyPerson = {
        name: "Alice",
        age: 25,
    };
    
    readonlyPerson.name = "Bob"; // 错误,只读属性无法修改
    

    在上述示例中,通过使用 keyof Person,我们创建了一个映射类型 ReadonlyPerson,将 Person 接口的所有属性都设置为只读。

  • 进行类型约束:

  1. function getProperty<T, K extends keyof T>(obj: T, key: K): T[K] {
        return obj[key];
    }
    
    const person: Person = {
        name: "Alice",
        age: 25,
    };
    
    const name = getProperty(person, "name"); // name 的类型为 string
    const age = getProperty(person, "age"); // age 的类型为 number
    const invalid = getProperty(person, "email"); // 错误,"email" 不是 Person 的属性名
    

    在上述示例中,getProperty 函数使用了两个泛型参数 TK extends keyof T。通过使用 keyof T,我们对第二个参数 key 进行了类型约束,确保它必须是 T 类型的属性名。

总结起来,keyof 操作符在 TypeScript 中用于获取一个类型的所有属性名组成的联合类型。它可以用于访问对象的属性,定义映射类型以及进行类型约束等场景,提供了更灵活和安全的类型操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值