我該如何告訴 TypeScript 一個函數會修改它父作用域中的值?
所以在某些情況下,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。然而,這個行為在線上 Playground https://www.typescriptlang.org/play/ 也會出現。
編輯: 我剛剛檢查過,這也存在於修改其狀態的類和函數中。