TypeScript中为解构对象指定类型 如何不使用any解决属性不存在报错
TypeScript 空对象追加属性报错合规解决方案
报错根因:TypeScript 会根据变量的初始赋值自动推导类型,你初始化user时赋值为空对象{},TS 就会将user的类型推导为空对象类型,该类型不允许访问/追加任何未声明的属性,因此会抛出Property 'name' does not exist on type '{}'的错误。
以下是几种符合ESLint规则、不需要用any的解决方案:
- 方案1:提前定义类型接口(最推荐,类型安全性最高)
先声明对象的结构,对于延后赋值的属性可以加?标记为可选属性:interface User { name?: string } let user: User = {} user.name = 'John' - 方案2:类型断言简化写法
适合对象结构简单、类型不需要复用的场景,初始化时直接通过as断言指定对象类型:let user = {} as { name?: string } user.name = 'John' - 方案3:索引签名适配动态属性场景
如果对象的属性是动态新增、无法提前枚举所有键名,可以用Record工具类声明索引结构,既符合类型规则又支持灵活加属性:// 声明键为字符串类型,值为任意类型,也可以根据需要限制值的类型比如Record<string, string> let user: Record<string, any> = {} user.name = 'John'
内容的提问来源于stack exchange,提问作者jacobcan118
相关产品推荐
相关产品推荐

