簡體   English   中英

在 TypeScript 中使用可選泛型類型時如何避免不必要的 arguments?

[英]How to avoid unnecessary arguments when using optional generic type in TypeScript?

StateFunction 有一個可選的(第二個)泛型類型——因為它有一個默認值。 問題是,如果我不通過第二個泛型,我仍然必須將undefined作為參數,即使我認為此時它是可選的。

使用 args 使args可選args? 確實有幫助,但它強制檢查空值,即使強硬類型也不能為空。

我也可以使 function 過載,但這不是最佳的,因為我使用的真正 function 相當長。

在未指定第二個泛型的情況下,是否有真正的解決方案可以使該論點消失?

interface StateFunctionAction<T, P> {
  (saved: T, args: P): void
}

const StateFunction = <T, P = undefined>(value : T, action: StateFunctionAction<T, P>) => {
  let saved = value;
  return (args : P) => action(saved, args);
}

const example1 = StateFunction<string>("Hello World", (saved) => console.log(saved))
example1(); // Help -> An argument for 'args' was not provided.

const example2 = StateFunction<string, number>("Hello World", (saved, n) => console.log(saved + " " + n))
example2(5);

不要使用undefined作為默認泛型類型,而是使用void 這將使爭論消失。

const StateFunction = <T, P = void>(value : T, action: StateFunctionAction<T, P>) => {
  let saved = value;
  return (args : P) => action(saved, args);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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