目前使用以下代码可以正常进行的类型推导,但每定义一个 item 都需要调用一次 defineItem ,想要实现一个 defineConfig 方法,省略掉 defineItem ,同时保留原先的类型推导。
interface Options<T> {
a: () => T;
b: (p: T) => void;
}
function defineItem<T>(options: Options<T>) {
return options;
}
const config = {
item1: defineItem({
a: () => ({ id: 1 }),
b: (params) => {}, // params 类型是 { id: number }
}),
item2: defineItem({
a: () => ({ name: '1' }),
b: (params) => {}, // params 类型是 { name: string }
}),
};
预期的效果
const config = defineConfig({
item1: {
a: () => ({ id: 1 }),
b: (params) => {}, // params 类型是 { id: number }
},
item2: {
a: () => ({ name: '1' }),
b: (params) => {}, // params 类型是 { name: string }
},
});
|