Angular TypeScript中JSON对象内定义String[]数组报错如何解决
错误原因
你的代码混淆了TypeScript类型注解和对象字面量赋值的逻辑:
- 大写开头的
String是JavaScript内置的字符串包装对象构造函数,是真实存在的JS值,对应TS类型为StringConstructor,不是TS用来标注普通字符串类型的关键字。TS中标记普通字符串类型必须使用小写开头的string。 - 对象字面量里
key: value结构中冒号后的值是给属性赋的实际内容,不是类型声明。你的代码实际是把String构造函数赋值给username、password字段,roles字段的写法不符合TS类型推导规则,最终触发索引类型报错。
解决方法
不要在对象字面量里写构造函数当类型,正确给类属性声明类型、赋初始值即可,两种常用写法如下:
写法1:提前定义接口约束类型(推荐,结构清晰可复用)
// 定义用户数据的类型结构 interface UserInfo { username: string; password: string; roles: string[]; } // 类中声明属性时指定类型,赋符合类型要求的初始值 private user: UserInfo = { username: '', password: '', roles: [] };
写法2:内联写类型注解(适合结构简单、不需要复用类型的场景)
private user: { username: string; password: string; roles: string[]; } = { username: '', password: '', roles: [] };
注意事项
- 日常业务开发绝大多数场景标注字符串类型都用小写
string,不要用大写String,后者指代字符串包装对象,几乎不会在业务代码里用到 - 如果你是要写Angular响应式表单,不要直接用普通对象定义结构,要引入
FormGroup、FormControl、FormArray对应的API创建表单实例,不要混用普通对象和表单结构的写法。
内容的提问来源于stack exchange,提问作者Seyon Seyon
相关产品推荐
相关产品推荐

