如何在已初始化对象上添加可选字段?无需any类型或预定义类型
TypeScript中动态添加对象字段的解决方案
以下是几种无需使用any类型或预定义类型的简单解决方法:
类型断言扩展当前对象类型
直接基于原对象的类型扩展出包含新增字段的类型,适合需要修改原对象的场景:let x = { a: 1, b: "2" }; (x as typeof x & { c?: number }).c = 3;这里
typeof x获取原对象的类型,通过交叉类型&添加可选字段c,既保留了原类型的约束,又允许新增字段。使用Object.assign创建新对象
如果可以接受创建新对象而非修改原对象,Object.assign会自动推断合并后的新类型:let x = { a: 1, b: "2" }; x = Object.assign(x, { c: 3 });执行后x的类型会自动更新为
{ a: number; b: string; c: number },无需手动声明类型。断言为兼容的索引签名类型
若后续可能添加更多同类型的字段,可以将对象断言为包含索引签名的类型,明确值的类型范围:let x = { a: 1, b: "2" } as { [key: string]: number | string }; x.c = 3;这种方式允许添加任意字符串键的字段,值的类型限制为原对象已有的
number或string,避免了any的松散性。
内容的提问来源于stack exchange,提问作者karthik suryadevara
相关产品推荐
相关产品推荐

