Как работать с интерфейсами именованных массивов: Элемент неявно имеет тип 'any', потому что индексное выражение не имеет типа 'number' - PullRequest
0 голосов
/ 03 июня 2019

При попытке присвоения именованного объекта пустому массиву интерфейса 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 неявно имеет тип 'any', потому что выражение индекса не имеет типа 'number'.

1 Ответ

0 голосов
/ 03 июня 2019

IBindings - это не массив, а объект JS.Таким образом, первые 3 строки вашего класса должны быть

    private _bindings: IBindings;

    constructor () {
        this._bindings = {};
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...