类型守卫,也叫类型保护。允许使用更小范围下的对象类型,从而使类型定义更加准确。
JS特性相关
typeof 获取属性类型

instanceof
[ ] 查找类型
场景:有个UserInfo 类型的接口,里面有 name、age、 address 等字段。然后有另外一个预览用户信息PreviewUserInfo类型接口,数据都是同样的数据,但是他只需要 name 和 address 这两个字段
解决方案:在 js 中是可以用a.b或者 a['b']去访问a对象里面的b内容,而 ts 的写法只能是 []。
结合in关键词进行循环,可以实现更加精简的写法。
TS特性相关
is 关键词

对isA这个函数中的参数item 给定义成 A 类型,那下面再使用的时候,item就会被识别为 A,而不是括号里面定义的 A | B,这样 filter 返回来的就是 A[]。在这种场景, **is** 有点像对于函数参数的 **as** 的感觉。如果传入的参数类型不符合**is**判断,那么就不会进入函数体,函数就不会执行。
keyof 关键词
keyof,跟 js 中的 Object.keys 略有类似,同理这个是对 ts 中的 interface做处理。
keyof 配合in 进行批量转换:把 Person 对象中的字段,全部变成 number 类型:
实际应用小场景:
增加一个字面量类型
interface Button1 {color: 'red'; // 增加一个字面量类型,用于区分warn: string;}interface Button2 {color: 'green'; // 增加一个字面量类型,用于区分label: string;}function getButton(button: Button1 | Button2): string {if (button.color === 'red') {return button.warn;} else {return button.label;}}

