Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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 - Fatal编程技术网

带“的类型变窄中缺少流量”;“未知”;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
。很抱歉