Skip to content

联合类型与类型保护

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}`
}