有没有办法通过检查函数来实现类型缩小?
Is there a way to achieve type narrowing by checking with a function?
class A {}
class B extends A {
bb() { ... }
}
function isB(obj: A) {
return obj instanceof B;
}
const x: A = new B(); // x has type A
if (isB(x)) {
x.bb(); // can I get x to have type B?
}
我知道,如果我有 x instanceof B
条件,它就会起作用。但是我可以通过isB()
吗?
Typescript 使用特殊的 return 类型 X is A
支持此功能。您可以在他们关于 user defined type guards.
的部分阅读更多相关信息
对于您的示例,您可以这样输入:
class A {}
class B extends A {
bb() { ... }
}
function isB(obj: A): obj is B { // <-- note the return type here
return obj instanceof B;
}
const x: A = new B(); // x has type A
if (isB(x)) {
x.bb(); // x is now narrowed to type B
}
class A {}
class B extends A {
bb() { ... }
}
function isB(obj: A) {
return obj instanceof B;
}
const x: A = new B(); // x has type A
if (isB(x)) {
x.bb(); // can I get x to have type B?
}
我知道,如果我有 x instanceof B
条件,它就会起作用。但是我可以通过isB()
吗?
Typescript 使用特殊的 return 类型 X is A
支持此功能。您可以在他们关于 user defined type guards.
对于您的示例,您可以这样输入:
class A {}
class B extends A {
bb() { ... }
}
function isB(obj: A): obj is B { // <-- note the return type here
return obj instanceof B;
}
const x: A = new B(); // x has type A
if (isB(x)) {
x.bb(); // x is now narrowed to type B
}