如何使用命名数组的接口:元素隐式具有“任何”类型,因为索引表达式不是“数字”类型
Posted
技术标签:
【中文标题】如何使用命名数组的接口:元素隐式具有“任何”类型,因为索引表达式不是“数字”类型【英文标题】:How to work with Interfaces of named arrays: Element implicitly has an 'any' type because index expression is not of type 'number' 【发布时间】:2019-10-19 05:30:13 【问题描述】:在尝试将命名对象分配给 IBindings 接口的空数组时,会出现此错误,但它可以正常编译并且工作正常。
节点 10.16.0,打字稿 3.5.1,VSCode。 已尝试更改为 extends 到 Array 但不起作用。
import IBindings from './ioc.interface';
export class ioc
private _bindings: IBindings[];
constructor ()
this._bindings = [];
bind (namespace: string, closure: Function)
if (typeof (closure) !== 'function')
throw Error('IoC.bind expects second parameter to be a closure: ' + closure);
console.log(closure);
// Error is Right here
this._bindings[namespace] =
closure: closure,
singleton: false,
cachedValue: null
console.log(`Binding $namespace to ioc container`);
export interface IBindings
[namespace: string]:
closure: Function,
singleton: boolean,
cachedValue: Function | null
我希望不会给出任何错误,因为它显然是一个需要传递给 IBindings 的字符串,但输出是 Element 隐含地具有“任何”类型,因为索引表达式不是“数字”类型。
【问题讨论】:
【参考方案1】:IBindings 不是数组而是 JS 对象。所以你班级的前 3 行应该是
private _bindings: IBindings;
constructor ()
this._bindings = ;
【讨论】:
我明白了,所以如果不扩展为数组,接口始终是对象 @GustavoFenilli 据我所知,打字稿只允许数字作为数组索引。以上是关于如何使用命名数组的接口:元素隐式具有“任何”类型,因为索引表达式不是“数字”类型的主要内容,如果未能解决你的问题,请参考以下文章
TypeScript - ts(7053):元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引