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)
发表评论