肯定賦值斷言與非空斷言

zhaiduting發表於2020-12-04

肯定賦值斷言與非空斷言

例2的let y!: number這種寫法叫做「肯定賦值斷言」,或者叫確定賦值、明確賦值都可以。叫法不同,意思一樣,都是用來通知TypeScript的:肯定賦值,不要報錯。

例3的console.log(z!)這種寫法叫做「非空斷言」。這種寫法不是在變數宣告的時候新增歎號,而是在變數使用的時候新增歎號。

function initialize() {
    x = y = z = 0;
}

//例 1
let x: number;
initialize();
console.log(x);     // x 飄紅,編譯器報錯

//例 2
let y!: number;     // 在變數 y 宣告之後新增一個歎號,可以防止報錯
initialize();
console.log(y);
console.log(y);

//例 3
let z: number;
initialize();
console.log(z!);    // 也可以在使用變數的時候新增一個歎號防止報錯
console.log(z!);

非空斷言的缺點很明顯:用幾次就必須加幾個歎號,缺少任何一個歎號都會報錯。而前例的肯定賦值斷言只需一個歎號即可,無論今後使用多少次都不必新增歎號了。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章