联合类型与类型保护
js
interface Bird {
name: string
sing: () => {}
}
interface Dog {
name: string
bark: () => {}
}
function animalType(animal: Bird | Dog) {
console.log(animal.name)
// animal.sing() // 报错: 因为不能确定animal是Bird类型
if('sing' in animal) animal.sing(); // 1、不报错,使用in语法来保护类型
// (animal as Bird).sing() // 使用类型别名来调用
}
// 2、使用typeof做类型保护
function add(p1: string | number, p2: string | number) {
if(typeof(p1) === 'number' && typeof(p2) === 'number') {
return p1 + p2 // 直接return p1 + p2 会报错
}
return `${p1}${p2}`
}