Typescript: инициализировать пустой массив при использовании extends Array <T> - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь добавить метод, который принадлежит классу, расширяющему массивы device с помощью Typescript (3.7.5).

export class devices extends Array<device> {
    constructor(items?:Array<device>) {
        super(...items);
    }

    getDeviceByUid(uid: number): device {
        return this.filter(elmt => elmt.uid == uid)[0];
    }
}

Но мне также нужно иметь возможность объявлять и определять пустой массив, как я сделал бы с обычным массивом:

unfilteredDeviceList: devices = []; //error : Property 'getDeviceByUid' is missing in type 'undefined[]' but required in type 'devices'.

Итак, я попытался так: unfilteredDeviceList: devices = new devices();

Я не получаю ошибок во время компиляции, когда делает последнее, но во время выполнения: Error: Uncaught (in promise): TypeError: super is not iterable (cannot read property Symbol(Symbol.iterator))

Как можно объявить и определить расширенный пустой массив, или что я должен изменить в конструкторе?

Ответы [ 2 ]

1 голос
/ 03 мая 2020

Изменение реализации конструктора таким образом должно работать:

class devices extends Array<device> {
    constructor(items?:Array<device>) {
        super();

        if (items) {
            this.push(...items);
        }
    }

    getDeviceByUid(uid: number): device {
        return this.filter(elmt => elmt.uid == uid)[0];
    }
}
1 голос
/ 03 мая 2020

Полагаю, теперь вы инициализируете const arr: devices = new devices([])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...