代码中有两个问题都与typescript推断文本类型的方式有关。
第一个(以及您收到的错误消息)是
type: 'foobar'
将推断
type
string
(在没有imediate原因的情况下,将其推断为字符串文字类型
'foobar'
). 解决这个问题的方法是手动使用一个类型断言来声明字符串文本类型。
修复此问题后,有效负载上出现新错误。
payload
应该是
InferArgs<T[K]>
所以它应该是元组和函数的参数。你只能给它赋值。如果我们要写
[buf]
我们会遇到与上面的字符串文本类型问题类似的问题。也就是说,数组文字将被类型化为数组而不是元组(同样,在没有imediate原因的情况下,将其类型化为元组类型)。
还有第三个问题,即缺乏
handelrs
const baseUpstreamImpl = (
client: {},
): ProtocolExtension<
{},
{
foobar: (buff: {}) => Promise<string>;
}
> => ({
name: 'base upstream impl',
type: 'upstream',
handlers: null as any,
messageCreators: {
foobar: (buff: {}) =>
Promise.resolve({
type: 'foobar' as 'foobar',
payload: [buff] as [{}],
}),
},
});