能正常推导的例子
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 对象参数形式也支持类型自动推导?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…