【发布时间】:2022-11-02 18:40:40
【问题描述】:
我正在尝试使用 instanceof 创建自定义类型保护,但奇怪的是它在 else 子句中没有按预期工作
这是一个带有相关游乐场链接的示例: Playground Link
class Person {}
class Animal {}
const isPerson = (obj: Person | Animal): obj is Person => obj instanceof Person;
const isAnimal = (obj: Person | Animal): obj is Animal => obj instanceof Animal;
const test: Person | Animal = new Person();
if(isAnimal(test)){
test; // const test: Animal
}
else {
test; // const test: never
}
我希望在 else 子句中 test 的类型为 Person,但它的类型为 never... 为什么?
我知道我也可以直接使用instanceof,但我更希望有一个更简洁的函数,就像那些创建的那样
【问题讨论】:
标签: typescript typeguards narrowing