[英]Typescript: Type a function with optional parameter
我正在尋找帶有可選參數的類型函數
我試過這個:
type MyFunctionType<T = null> = (options: T) => unknown;
const func1: MyFunctionType<{ option1: number }> = (options) => options.option1;
const func2: MyFunctionType = () => 'test';
console.log(func1({option1: 12})); // Ok
console.log(func2()); // Error : Expected 1 argument
typescript 在 func2 上顯示錯誤。
所以我試着用“?” 關於選項參數:
type MyFunctionType2<T = null> = (options?: T) => unknown;
const func1: MyFunctionType2<{ option1: number }> = (options) => options.option1;
const func2: MyFunctionType2 = () => 'test';
console.log(func2()); // Ok
console.log(func1()); // No error is raised
但在這種情況下,typescript 不顯示使用不帶參數的 func1 的錯誤。
有沒有辦法解決這個問題?
感謝您閱讀
是的,使用條件類型:
type MyFunctionType<T = null> = T extends null | undefined
? (options?: T) => unknown
: (options: T) => unknown;
const func1: MyFunctionType<{ option1: number }> = (options) => options.option1;
const func2: MyFunctionType = () => 'test';
func2();
func1(); // shows an error "Expected 1 arguments, but got 0."
這將泛型類型MyFunctionType
定義為 function,如果參數的類型為 null、未定義或兩者的聯合,則其參數是可選的。 在這種情況下,您甚至可以將它們完全排除在外:
type MyFunctionType<T = null> = T extends null | undefined
? () => unknown
: (options: T) => unknown;
不過,可以說,我真的看不到這樣的類型定義的用例,因為它總是會隱藏實際的返回類型並強制使用單個參數,而不允許使用多個可能有助於提高可讀性的參數。
試試這種方式類型 MyFunctionType<T = never> = (options: T) => unknown;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.