从TypeScript中的字典推断通用类型参数

时间:2018-08-28 09:24:20

标签: typescript generics typescript-typings

我需要创建一个包含不同方法的对象。 每种方法可以具有不同的有效负载。 因此,我想添加类型安全性。

问题

是否可以指定每种方法可以具有不同的有效载荷类型?

保持现状

该操作的键入方式如下:

export type Action<TPayload> = (payload?: TPayload) => TPayload;

然后,我需要创建这些方法的字典。 以下代码示例介绍了 error

export interface Actions<TPayload> { 
                      // ^--- TypeScript should get to know that TPayload is different for each action
  [key: string]: Action<TPayload>;
}

下面的代码片段显示这些类型的输入会导致丢失所创建字典的所有信息。

class Customer {}
class Product {}

const actions: Actions<Customer|Product> = {
  addCustomer: (payload: Customer) => ({}),
  addProduct: (payload: Product) => ({}),
};

actions的对象没有任何方法。

我的目标

我想得到这样的东西:

enter image description here

在此先感谢您的任何反馈或建议。

背景

我想保留这种类型的信息,因为我想稍后使用通用的工厂函数来转换这种方法字典。

0 个答案:

没有答案