2
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()ますか?

4

1 に答える 1

4

Typescript は、特別な戻り値の型でこれをサポートしますX is Aこれについては、ユーザー定義型ガードに関するセクションで詳しく読むことができます。

あなたの例では、次のように入力できます。

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
}
于 2018-07-13T21:47:18.080 に答える