有没有一种方法可以通过检查功能来缩小类型?

时间:2018-07-13 21:41:53

标签: typescript narrowing type-narrowing

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()吗?

1 个答案:

答案 0 :(得分:4)

Typescript通过特殊的返回类型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
}