使用泛型提取对象属性的类型

时间:2020-10-12 13:03:38

标签: javascript typescript typescript-generics

我有以下代码

type GTMCreator<Payload> = (payload: Payload) => "a";

interface BudgetPayload {
  a: 2;
}
interface MarketPayload {
  b: 2;
}

interface Events {
  budget: GTMCreator<BudgetPayload>;
  market: GTMCreator<MarketPayload>;
}

const budget: GTMCreator<BudgetPayload> = (payload) => "a";
const market: GTMCreator<MarketPayload> = () => "a";

const events: Events = {
  budget,
  market
};

type Push = <T extends keyof typeof events>(
  event: T,
  ...payload: Parameters<typeof events[T]>
) => void;

const something = () => ({ push: (items: any) => "s" });

const push: Push = (event, payload) => {
  something().push(events[event](payload));
};

我希望根据作为第一个参数传递的事件名称来推断有效载荷的类型。现在推断为

输入“ BudgetPayload | MarketPayload'无法分配给类型 “预算支出和市场支出”。

为什么不将其推断为“ BudgetPayload | MarketPayload”?

代码沙箱:https://codesandbox.io/s/thirsty-poitras-0d8qh?file=/src/index.ts

0 个答案:

没有答案