簡體   English   中英

為什么沒有打字稿檢查選項參數?

[英]Why doesn't typescript check an option argument?

為什么沒有打字稿顯示以下示例的任何類型錯誤?

function fancyMethod({ option1 = true }: { option1?: boolean } = {}) {
    console.log(option1);
}

fancyMethod("abc");
fancyMethod(false);
fancyMethod(42);

使用此Playground Link自行嘗試

因此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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM