typescript从类似接口/对象的类型生成可能的函数参数组合



我有一个TypeScript类型(我也可以将其实现为接口(,它定义了队列消息的所有可能的处理程序名称以及处理程序所期望的数据类型。

export type JobDataTypes = {
'user-handler': {
firstname: string;
};
'calendar-handler': {
memberId: number;
appointmentId: number;
};
};

我现在想创建一个函数insertToQueue(jobType: keyof JobDataTypes, data) => void,它基于给定的jobType只接受上面JobDataTypes类型中的正确数据类型。由于我需要多个地方的数据类型,我不想用覆盖函数类型的方式对其进行硬编码。我必须如何实现type InsertToQueueParams类型才能实现该目标?

这似乎是泛型的一个简单用例。

function insertToQueue<
K extends keyof JobDataTypes
>(jobType: K, data: JobDataTypes[K]){}

我们可以使用泛型类型K来表示与jobType一起传递的keyof JobDataTypes。现在可以使用JobDataTypes[K]键入data参数。

insertToQueue("user-handler", { firstname: "" })
insertToQueue("calendar-handler", { memberId: 0, appointmentId: 0 })
insertToQueue("calendar-handler", { firstname: "" }) // Error

游乐场

最新更新