gpt4 book ai didi

typescript - 假设从不的通用类型守卫

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:52 25 4
gpt4 key购买 nike

这段代码:

class X<T> {
isString(): this is X<string> {
return true;
}

isNumber(): this is X<number> {
return false;
}
}

const x = new X();

if (x.isString()) {

} else if (x.isNumber()) { // Line 15

}

我认为在语义上是正确的,但会产生此错误:

message: 'Property 'isNumber' does not exist on type 'never'.' at: '15,14'

为什么?我应该如何编写 if 批处理语句?

最佳答案

typescript 中的类型是结构化的。

在您的示例中,X<string>X<number>在结构上是相同的——它们都有两种类型保护方法,isString()isNumber() ,仅此而已。所以编译器假定如果第一个类型保护返回 true,第二个类型保护也必须返回 true(因为实际上它们正在测试相同的类型),并且 else分支无法访问。

一旦你做出X实际上取决于T ,它编译:

class X<T> {
t: T;

isString(): this is X<string> {
return true;
}

isNumber(): this is X<number> {
return false;
}
}

const x = new X();

if (x.isString()) {

} else if (x.isNumber()) { // Line 15

}

关于typescript - 假设从不的通用类型守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com