keyof
keyof后面跟接口,表示遍历接口的这些的属性名(实际上一个键值对就是冒号前面的这些)。keyof表示索引查询,可以用于获取接口类型的所有键,其返回类型是联合类型。
js
interface People {
name:string;
age:number;
}
// type类型别名:pType的类型表示"name"|"age"
// 键名以字符串形式存储,所以遍历出的接口属性名都是字符串,就是常量
type pType = keyof People;
// 编译报错,p1的值只能是字符串name和age
let p1:pType = 2
let p2:pType = "xxx"
当需要type pType = keyof People;
的类型也可以是其他字符串的做法如下:
js
interface People {
name:string;
age:number;
// 表示属性名是数字number类型,遍历后是变量number
[idx:number]:number|string;
// 表示属性名是字符串string类型,遍历后是变量string
[idx:string]:number|string;
}
// 类型别名:pType的类型表示"name"|"age"|number|string
type pType = keyof People;
let p1:pType = 6;
let p2:pType = "xxx"
in
in用于取联合类型的值。主要用于数组和对象的构造。
js
type name = 'firstName' | 'lastName';
type TName = {
[key in name]: string;
};
typeof
在TS
中,typeof
操作符可以用来获取一个变量或对象的类型。
js
// 提取变量
let str = "267";
type StrType = typeof str; // string
// 编译报错
let a:StrType = 267;
// 提取对象 (包含对象的所有属性且属性值类型要一样)
let obj = {
name: 530,
age: "418",
height: 816
}
type withJ = typeof obj;
// 编译报错
let obj1:withJ ={
}
// 编译报错
let obj2:withJ = {
width:267
}