拥有一个 Typescript 的联合类型变量
我可以通过使用 if 判别块来检查属性 b 的值类型,以正确地将属性 x 分配给正确的类型,以保持 A 类型的一致性。
在判别式块之外,
有没有一种方法可以强制编译器拒绝这个?
在typescriptlang.org/play上查看
A
。type A = {
b: true
x: number
} | {
b: false
x: string
}
declare const v: A
我可以通过使用 if 判别块来检查属性 b 的值类型,以正确地将属性 x 分配给正确的类型,以保持 A 类型的一致性。
if (v.b) { // v.x is number
// ok for compiler
v.x = 3
// compiler error as v.x should be number
v.x = ''
} else { // v.x is string
// compiler error as v.x should be string
v.x = 3
// ok for compiler
v.x = ''
}
在判别式块之外,
v.x
显示为 number | string
,但编译器没有抱怨将 x
分配给 number | string
,尽管这会破坏 type A
的一致性。v.x = 3 // ok for compiler
v.x = '' // ok for compiler
有没有一种方法可以强制编译器拒绝这个?
在typescriptlang.org/play上查看
关键在于我希望TS编译器在类型明确定义后,在编译时保持类型的一致性,毕竟这是Typescript的主要目的之一...
显而易见的情况是:一个开发团队正在处理涉及“类型A”的代码库,我希望尽可能地减少运行时错误
我只是想知道是否有一种方法可以避免这个问题,或者它是Typescript功能上的缺陷。 - aleclofabbro
v.x
...因此它是不健全的一个例子。 - jcalz