Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 有没有一种方法可以通过使用函数进行检查来实现类型缩小?_Typescript_Narrowing_Type Narrowing - Fatal编程技术网

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
}