[Pick Up TS](5) 类型谓词

1,424 阅读1分钟
interface Bird {
    fly();
    layEggs();
}

interface Fish {
    swim();
    layEggs();
}

function isFish(pet: Fish | Bird): pet is Fish {
    return (<Fish>pet).swim !== undefined;
}

// 'swim' 和 'fly' 调用都没有问题了

if (isFish(pet)) {
    pet.swim();
}
else {
    pet.fly();
}

pet is Fish就是类型谓词。 谓词为 parameterName is Type这种形式, parameterName 必须是来自于当前函数签名里的一个参数名。