基于泛型类型的打字稿默认函数参数

时间:2021-04-04 19:19:46

标签: typescript generics

extractor 的类型为 handleEvent 时,我想重构以下内容以指定 TEvent 方法的 DefaultEvent 参数的默认实现。

而不是调用:

handleEvent<DefaultEvent>({value: "test"}, (e) => e.value);

如果可能,我希望以下内容是等效的:

handleEvent<DefaultEvent>({value: "test"});
type DefaultEvent = {
  value: string
}

type SpecificEvent = {
  specificValue: string
}

function handleEvent<TEvent>(
  e: TEvent,
  extractor: (e: TEvent) => string
  // default extractor implementation should be (e) => e.value when TEvent is of type DefaultEvent
  ) {
    console.log(extractor(e));
}

handleEvent<DefaultEvent>({value: "test"}, (e) => e.value);
handleEvent<SpecificEvent>({specificValue: "test2"}, (e) => e.specificValue);

1 个答案:

答案 0 :(得分:1)

您可以通过函数重载来处理类型,但您仍然需要提供缺少的提取器即函数实现。这是the playground