Angular组件声明Object类型对象编译报danger属性不存在如何解决
报错原因
你给属性propiedades显式指定了通用类型Object,TypeScript的顶层Object类型仅描述所有JS对象共有的原生属性、方法,不会识别你自定义挂载在对象上的danger字段。模板编译做类型检查时,会判定Object类型上不存在danger属性,抛出TS2339错误。
修复方案
选择以下任意一种方式调整代码即可解决问题:
- 方案1:移除显式的
Object类型标注,让TypeScript自动根据赋值推断类型
调整后的属性声明代码:// 移除:Object,TS会自动将propiedades推断为{ danger: boolean }类型 propiedades = { danger: false } - 方案2:为
propiedades定义精确的结构类型,替换通用Object标注
可以单独定义接口描述对象结构:// 组件类外定义对应结构接口 interface ClasePropiedades { danger: boolean; } export class ClasesComponent { alerta:string="alert-danger"; constructor() { } // 标注为自定义的精确类型 propiedades: ClasePropiedades = { danger: false } } - 方案3:直接使用内联类型标注,无需单独定义接口
// 直接在类型位置写清楚对象包含的字段类型 propiedades: { danger: boolean } = { danger: false }
开发提示:不要给自定义业务对象标注顶层
Object、any这类宽泛类型,会丢失TypeScript的类型校验能力,要么让TS自动推断类型,要么标注和实际结构匹配的精确类型。
内容的提问来源于stack exchange,提问作者Edwin Quijada
相关产品推荐
相关产品推荐

