TypeScript 的 keyof 和 in 操作符

keyof   

keyof操作符接受一个对象类型作为参数,返回该对象属性名组成的字面量联合类型

type Dog = { name: string; age: number;  };
type D = keyof Dog;   //type D = "name" | "age"

in

in的右侧一般会跟一个联合类型,使用in操作符可以对该联合类型进行迭代。 其作用类似JS中的for...in或者for...of

下面是一个将接口里的所有属性改为只读属性的demo 其实还可以实现改为可选 必选等属性 原理是一样的

//定义Bigs的接口
interface Bigs {
    x: string,
    y?: number,
    z: boolean,
}

//将接口属性统一更改为只读,用到了Ts的泛型、in操作符
// [k in keyof T]这段代码表示遍历T中的每一个属性,那么T[k]就是每个属性所对应的值,可以简单理解为前者取的是键key,后者取的是值value
type ReadyOnly<T> = {
    readonly [k in keyof T]: T[k]
}
let objs: ReadyOnly<Bigs> = {
    x: '123',
    y: 1,
    z: false
}
//就会报错 因为属性是只读属性 
objs.z = true //Cannot assign to 'z' because it is a read-only property.(2540)

猜你喜欢

转载自blog.csdn.net/hhhhhhaaaaaha/article/details/129911588