我有下面的代码,并noImplicitAny:true在tsconfig:
let o = {a: 3};
// works fine
o['a'] = 3;
// reports an error
// Error:(4, 1) TS7017:Index signature of object type implicitly has an 'any' type.
o['b'] = 3;
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?
这是在TypeScript游乐场 - 确保单击选项并设置noImplicitAny(似乎不记得可共享链接中的选项).
shu*_*son 16
导致该错误的原因是未明确定义索引签名.
您可以index signature明确地声明:
let ox : { [index:string] : number } = {};
ox['b'] = 3;
Run Code Online (Sandbox Code Playgroud)
我认为原因o['a'] = 3;不是错误是因为括号符号属性访问的规则1,它在规范中的以下规则中定义:
- 如果index是字符串文字或数字文字,并且对象具有明显属性(第3.11.1节),其名称由该文字给出(在数字文字的情况下转换为字符串表示),属性访问属于该属性的类型.
- 否则,如果object具有明显的数字索引签名且索引的类型为Any,Number基本类型或枚举类型,则属性访问属于该索引签名的类型.
- 否则,如果object具有明显的字符串索引签名且索引的类型为Any,String或Number原始类型或枚举类型,则属性访问属于该索引签名的类型.
- 否则,如果index的类型为Any,String或Number基元类型或枚举类型,则属性访问的类型为Any.
- 否则,属性访问无效并发生编译时错误.
| 归档时间: |
|
| 查看次数: |
8071 次 |
| 最近记录: |