我有以下代码
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