目前使用以下代码可以正常进行的类型推导,但每定义一个 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 }
},
});
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.