typescript提供了一些方式来操作类型这种数据,但是需要注意的是,类型数据只作为类型来使用,而不是作为程序中的数据,这是两种不同的数据,一个在编译检测阶段,一个用户程序执行阶段
typeof
在typescript中 typeof 有两种作用:
- 获取数据的类型
- 捕获数据的类型
let str1 = 'hello';
//let声明的是变量,把 'string' 作为值
let t = type of str1;
//type声明的是类型,把 ‘string’作为类型
type myType = typeof str1;
let a = t;
let str2: myType = 'world';
keyof
获取类型的所有 key 的集合
interface Person {
name: string;
age: number;
}
type personKeys = keyof Person;
//等同于:type personKeys = 'name' | 'age'
let p1 = {
name: 'thia',
age: 30
}
function getPersonVal (k: personKeys) {
return p1[k]
}
/**等同于
function getPersonVal(k: 'name' | 'age'){
return p1[k]
}
*/
getPersonVal('name') //ok
getPersonVal('gender') //error
in
针对类型进行操作的话,内部使用的for in 对类型进行遍历
interface Person {
name: string;
age: number;
}
type personKeys = keyof Person;
type newPerson = {
[k in personKeys] : number;
}
/**
type newPerson = {
name: number;
age: number;
}
**/
//注意: in后面的类型值必须是 string 或者 number,或者symbol