Typescript 有没有一种方法可以通过使用函数进行检查来实现类型缩小?
我知道如果我有Typescript 有没有一种方法可以通过使用函数进行检查来实现类型缩小?,typescript,narrowing,type-narrowing,Typescript,Narrowing,Type Narrowing,我知道如果我有x个B的instanceof在这个条件下,它会工作。但是我可以通过isB()来实现吗?类型脚本通过一个特殊的返回类型来支持这一点,X是一个。关于这一点,您可以在他们关于的部分中了解更多 对于您的示例,您可以这样键入: class A {} class B extends A { bb() { ... } } function isB(obj: A) { return obj instanceof B; } const x: A = new B(); // x has t
x个B的instanceof
在这个条件下,它会工作。但是我可以通过isB()
来实现吗?类型脚本通过一个特殊的返回类型来支持这一点,X是一个
。关于这一点,您可以在他们关于的部分中了解更多
对于您的示例,您可以这样键入:
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?
}
class A{}
B类扩展了A类{
bb(){…}
}
函数isB(obj:A):obj是B{//为什么不强制转换呢?@jhpratt强制转换不存在于Typescript中,因为类型纯粹是编译时信息。我想你在考虑类型断言。明显的缺点是,它使代码更难维护,而且重构也不安全。@IngoBürk这不是强制转换吗?(x).bb()
@jhpratt我正在使用具有以下isType()的现有代码已经有函数了,我想输入less@benwaffle不,这是一个类型断言,不是强制转换。强制转换是在运行时在数据类型之间进行实际转换的过程。类型断言在传输时绝对不会生成代码。谢谢!这正是我想要的
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
}