因此,在某些情况下,TypeScript会在if语句中自动减少值的类型空间。这非常有用。但是我经常处理这样一个问题:如果调用一个函数来修改它所赢得的值,那么它将扩大类型空间。
以下是该问题的简化示例:
function example() {
let val = "foo";
function modifyVal() {
val = "bar";
}
if(val == "foo") {
//typescript knows that val must be the unit type "foo"
modifyVal(); //this changes it's value
//typescript still thinks that val == "foo" and thinks it
//shouldn't be comparable to "bar"
if(val == "bar") {
}
}
}
是否有一些简单的方法可以禁用此功能?或者让编译器识别val
被修改。目前我正在使用val as T
。
我使用的是版本2.7.0-dev.20171104
。但是,该行为也会显示在在线游乐场https://www.typescriptlang.org/play/
编辑:我刚检查过这也是修改状态的类和函数的问题。