Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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,当我将一个变量初始化为null,但将另一个类型作为一个联合(例如,number | null)时,它似乎会立即丢失非null类型信息(未定义的情况也会发生同样的情况,除非我将其保持单位化,而不是显式地将其设置为未定义) 有没有一种方法可以正确访问foo的类型?事实证明,这是一种已知的权衡您正在打印的是foo的值,而不是foo的类型。而且无论您的类型脚本语法如何,它总是只有一种类型。Typescript只是一种“元语言”,它允许您“认为”您正在定义多个类型,但在下面(Javascript级别),

当我将一个变量初始化为null,但将另一个类型作为一个联合(例如,
number | null
)时,它似乎会立即丢失非null类型信息(未定义的情况也会发生同样的情况,除非我将其保持单位化,而不是显式地将其设置为未定义)


有没有一种方法可以正确访问foo的类型?

事实证明,这是一种已知的权衡

您正在打印的是
foo
的值,而不是
foo
的类型。而且无论您的类型脚本语法如何,它总是只有一种类型。Typescript只是一种“元语言”,它允许您“认为”您正在定义多个类型,但在下面(Javascript级别),这种所谓的“多类型”会退化为一个实际类型。很抱歉,我并不是指日志输出(尽管第二个日志将输出123,而不是null)。我在ts操场(和vscode)上通过鼠标在这些点上移动来查看foo的推断类型。如果你打开到操场的链接,你就会明白我的意思。Typescript假定foo不能是第二次调用console.log时的数字,即使它是,并且是以这种方式显式键入的。
let foo: number | null = null;

foo; //foo's type (seen by mousing over) is "null", not "number | null"

function blah() {
  foo = 123; //foo is "number | null"
}
blah();

foo; //foo's type is "null", not "number | null"