TypeScript中如何使用三点运算符实现类型解构扩展 解决ts(7008)报错
报错原因
TypeScript 的对象类型字面量语法不支持直接在大括号内使用展开运算符引入另一个类型的所有属性,你写的...A会被TS解析为字面量对象的计算属性,由于A是类型而非运行时值,TS无法推断其类型就会抛出Member 'A' implicitly has an 'any' type.ts(7008)错误。
正确实现类型扩展的写法
你可以根据场景选择以下两种方案:
方案1:使用交叉类型(适用type定义场景)
直接通过&运算符合并两个类型,效果和Flow中的类型扩展完全一致:
type A = { a: string } // 另一个文件导入type A后 type B = A & { b: string }
此时类型B会同时拥有a: string和b: string两个属性。
方案2:使用interface继承(适用需要声明合并/后续扩展场景)
如果你用interface定义类型,可以用extends语法实现继承扩展:
interface A { a: string } // 另一个文件导入interface A后 interface B extends A { b: string }
内容的提问来源于stack exchange,提问作者Aisen Wang
相关产品推荐
相关产品推荐

