TypeScript 映射类型更改值函数的返回类型



我有一个这样的TypeScript类型:

type Api = {
createItem: (name: string) => Promise<Item>;
getItem: (id: number) => Promise<Item>;
updateItem: (item: Item) => Promise<Item>;
deleteItem: (id: number) => Promise<void>;
};

我正在尝试弄清楚如何将其转换为以下内容:

type Api = {
createItem: (name: string) => { type: 'success'; result: Item; } | { type: 'error' };
getItem: (id: number) => { type: 'success'; result: Item; } | { type: 'error' };
updateItem: (item: Item) => { type: 'success'; result: Item; } | { type: 'error' };
deleteItem: (id: number) => { type: 'success' } | { type: 'error' };
};

我认为映射类型是这里的一种方式:

type NewApi = {
[_ in keyof Api]: (???) => { type: 'success'; result: ??? } | { type: 'error' }
};

不过,我无法弄清楚如何填写那里的空白。我什至不确定是否有可能做到这一点。

我需要这种类型的原因是我正在构建一个网关代理,并且该类型的实际实现将是一个实际的Proxy对象,拦截成员访问,用另一个代理模拟它们的值,该代理捕获函数调用以进行更改并返回上述联合类型。

实现部分很好,但我似乎无法获得它的类型以使智能感知工作。

您可以使用打字稿 参数和返回类型类型

type NewApi = {
[K in keyof Api]: (...args: Parameters<Api[K]>) => { type: 'success'; result: ReturnType<Api[K]> } | { type: 'error' }
};

请看这个游乐场。

最新更新