[英]Why doesn't typescript check an option argument?
為什么沒有打字稿顯示以下示例的任何類型錯誤?
function fancyMethod({ option1 = true }: { option1?: boolean } = {}) {
console.log(option1);
}
fancyMethod("abc");
fancyMethod(false);
fancyMethod(42);
因此fancyMethod
的參數類型必須是一個對象,可選擇一個布爾屬性option1
。
您傳入的所有參數都是沒有option1
屬性的對象,但這是正常的,因為它是可選的,因此在每種情況下,您只需獲取默認的option1 = true
。
一個顯示相同內容的簡短示例:
let x: { option1?: boolean } = "abc";
x = 42;
字符串和數字都與所有屬性都是可選的類型兼容。
但是,如果您現在嘗試:
x = { foo: 1 };
你收到一個錯誤:
t.ts(11,7): error TS2322: Type '{ foo: number; }' is not assignable to type '{ option1?: boolean | undefined; }'.
Object literal may only specify known properties, and 'foo' does not exist in type '{ option1?: boolean | undefined; }'.
因為如果傳入的屬性不屬於該類型的屬性,則會進行額外的檢查,如果嘗試將具有其他屬性的對象文字傳遞給fancyMethod()
, fancyMethod()
發生同樣的情況
您可以通過將類型與object
類型合並來強制TypeScript僅接受object
:
function fancyMethod({ option1 = true }: { option1?: boolean } & object = {}) {
console.log(option1);
}
fancyMethod("abc");
fancyMethod(false);
fancyMethod(42);
fancyMethod({}); // no error
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.