带“的类型变窄中缺少流量”;“未知”;typescript中的数据类型
我在和一个不知名的人玩。最简单的例子是:带“的类型变窄中缺少流量”;“未知”;typescript中的数据类型,typescript,Typescript,我在和一个不知名的人玩。最简单的例子是: let value: unknown; if (value === undefined || value === null || value === '') { typeof value; // ""|null|undefined fine } else if (typeof value === 'object') { typeof value; // object | null huh? } 这是设计限制还是typesc
let value: unknown;
if (value === undefined || value === null || value === '') {
typeof value; // ""|null|undefined fine
} else if (typeof value === 'object') {
typeof value; // object | null huh?
}
这是设计限制还是typescript中的错误?我在问题追踪器中找不到类似的东西。我将此称为设计限制/缺失功能:TypeScript目前没有或,尽管在这里()做了一些工作,但它确实存在。这意味着没有通用的方法来选择两种类型
A
和B
,并表示“可分配给A
但不可分配给B
”的类型,即A-B
或A\B
或A¬ B
,等等。如果A
和B
恰好是联合类型,其中B
的每个成员都是A
的成员,则可以使用条件类型,如,但这仅适用于联合类型
由于unknown
不是联合类型,因此在TypeScript中无法表示类型unknown¬(undefined | null |“”)
,这就是您希望编译器在else
子句中将值缩小到的范围。在else
子句中根本不会发生变窄,并且value
保持unknown
。很抱歉