首页 > 解决方案 > 在 TypeScript 中使用可选泛型类型时如何避免不必要的参数?

问题描述

StateFunction 有一个可选的(第二个)泛型类型——因为它有一个默认值。问题是,如果我不通过第二个泛型,我仍然必须将undefined其作为参数,即使我认为此时它是可选的。

使args可选 usingargs?确实有帮助,但它强制检查空值,即使强硬类型也不能为空。

我也可以重载该函数,但这不是最佳的,因为我使用的实际函数很长。

在未指定第二个泛型的情况下,是否有真正的解决方案可以使该论点消失?

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);

标签: typescript

解决方案


而不是undefined用作默认的泛型类型,void而是使用。这将使争论消失。

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

推荐阅读