能正常推导的例子
function createStore<
R,
E extends Record<string, (arg: R) => void>
>(reducers: R, effects: E) {}
createStore(
{
hello() {},
},
{
world(arg) {
// 这里能自动推导 arg: { hello(): void }
arg.hello();
},
},
);
我封装库需要写成以下参数形式
function createStore<
R,
E extends Record<string, (arg: R) => void>
>(store: { reducers: R; effects: E }) {}
createStore({
reducers: {
hello() {},
},
effects: {
world(arg) {
// 这里无法推导 TS2571: Object is of type 'unknown'.
arg.hello();
},
},
});
有没有办法让下面这种 store 对象参数形式也支持类型自动推导?
解决了
这里必须是箭头函数,并且函数的参数必须表明类型。这算 ts 的 bug 吗
更新回答
可以使用
建造者模式
https://stackoverflow.com/que...