如何合并TypeScript interface定义与变量的默认值配置?
解决方案1:从默认值反向推导类型
先编写带默认值的初始对象,需要精确控制类型的字段通过 as 断言指定类型,再通过 typeof 直接推导得到Store类型,无需重复定义字段:
// 定义带默认值的初始对象 const storeDefault = { infinoteToken: null as string | null, allNotes: [] as Note[], // 其余字段直接写默认值,类型会自动推导 } // 反向推导类型,无需手动写interface的字段声明 type Store = typeof storeDefault export const store: Store = reactive(storeDefault)
解决方案2:用Class同时定义类型和默认值
如果你的store逻辑比较复杂,更推荐用Class实现,类的属性既可以声明类型,也可以直接赋值默认值,实例化后包裹reactive即可直接使用:
class Store { // 同时定义类型和默认值 infinoteToken: string | null = null allNotes: Note[] = [] // 还可以直接封装store相关的方法 clearToken() { this.infinoteToken = null } } // 实例化后直接用reactive包裹,自动推导类型为Store export const store = reactive(new Store())
两种方案都可以完全避免类型定义和默认值的字段重复声明,同时保留完整的TypeScript类型校验能力。
内容的提问来源于stack exchange,提问作者WoJ
相关产品推荐
相关产品推荐

