我的代碼:
function test() {
let value: number;
for (let i = 0; i < 10; i ) {
value = i;
console.log(value);
}
return value;
}
test();
得到了這個:
Variable 'value' is used before being assigned
我發現這很奇怪,因為我見過其他類似的問題,它們使用回呼或 Promise 或其他一些異步方法,而我只使用同步 for 回圈。
uj5u.com熱心網友回復:
TypeScript 無法推斷回圈體中的任何內容都在運行——它不會檢查i從 0 開始,條件是i < 10,并且因此回圈體將至少運行一次。此行為與以下內容非常相似:
function test() {
let value: number;
if (Math.random() < 0.5) {
value = 5;
}
return value;
}
這會產生相同的錯誤。
為了讓 TS 知道該值確實是在最后定義的,您需要使其完全明確。通常,實作這一點的最佳方法是通過陣列方法和輔助函式定義和分配給變數一次,使用constTS - 最小化重新分配時,TS 效果最佳。
uj5u.com熱心網友回復:
使用非空斷言運算子來確保“在型別檢查器無法得出該事實的背景關系中,其運算元是非空且非未定義的。”
function test() {
let value!: number;
for (let i = 0; i < 10; i ) {
value = i;
console.log(value);
}
return value;
}
test();
結果
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/360658.html
標籤:javascript 打字稿 for循环 变量 变量赋值
上一篇:展平陣列中的物件
