[英]Can an optional parameter be null in TypeScript?
根據 這篇文章,在 TypeScript 中啟用嚴格空值檢查時,除非聯合明確允許,否則不能將null
或undefined
分配給變量。
// required value
let req: string;
req = "Something"; // OK
req = null; // Error
req = undefined; // Error
// nullable value
let nbl: string | null;
nbl = "Something"; // OK
nbl = null; // OK
nbl = undefined; // Error
但是在 TypeScript 的可選值中允許null
嗎?
// optional value
let opt?: string; // (actually invalid, as optional types cannot be used for variable declarations, but that's not the point, so imagine we are dealing with function parameters or something)
opt = "Something"; // OK
opt = null; // OK? Error?
opt = undefined; // OK
或者是
opt?: string;
相當於
opt: string | undefined;
因此不允許null
就像微軟的編碼指南推薦的那樣?
編輯:重要說明正如 Quentin C 在下面的評論中指出的那樣,此處列出的行為僅在啟用嚴格空檢查時才適用: "strictNullChecks": true
in tsconfig.json
。
類型null
和undefined
作為單獨的類型處理。 可選類型是特殊的,還允許在函數調用中省略參數。
1. 沒有聯合或可選,除了類型本身之外什么都不允許。
function foo(bar: string) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // Error
foo() // Error
2. 要額外允許null
,可以與null
進行聯合。
function foo(bar: string | null) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // Error
foo() // Error
3. 允許undefined
工作方式類似。 請注意,該參數不能被遺漏或為null
。
function foo(bar: string | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // Error
4. 你也可以允許兩者,但必須仍然給出參數。
function foo(bar: string | null | undefined) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // OK
foo() // Error
5. 使用optional你可以省略參數,或者傳遞undefined
,但不是null
。
function foo(bar?: string) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // Error
foo(undefined); // OK
foo() // OK
6. 為了允許所有三種特殊情況,可以組合optional和null
。
function foo(bar?: string | null) {
console.info(bar);
}
foo("Hello World!"); // OK
foo(null); // OK
foo(undefined); // OK
foo() // OK
此外, optional僅可用於參數或其他類型聲明,例如接口,而不可用於常規變量。 因為在賦值時忽略變量的值是沒有意義的。
因此,
let d?: string;
將毫無意義並導致編譯錯誤。
let d?: string;
將類型聲明為string | undefined
string | undefined
。
這是因為undefined
是 JS 變量的默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.