簡體   English   中英

Typescript:輸入帶有可選參數的 function

[英]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.

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