Есть ли способ добиться сужения типа путем проверки с помощью функции?
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 ответ
Решение
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
}