Правильный способ экспорта интерфейса массива, чтобы избежать «Свойство 'pu sh' не существует для типа ...» в Angular - PullRequest
0 голосов
/ 28 мая 2020

Мне нужно экспортировать 2 интерфейса, причем первый из них:

export interface DataEntry {
   title: string,
   content: string
}

Теперь для второго, я хотел бы экспортировать класс как массив интерфейса DataEntry. Я знаю, что мы можем сделать это, объявив переменную напрямую:

let data: DataEntry[] = [];

Однако я хотел бы иметь возможность экспортировать этот DataEntry[] интерфейс в DataSource. Ниже представлена ​​моя попытка:

export interface DataSource {
    [index: number]: DataEntry
}

Это, однако, вызовет ошибку, когда я попытаюсь что-либо сделать:

let data: DataSource = [];
//Error: Property 'push' does not exist on type 'DataSource'
data.push({ title: 'Title', content: 'Content' });

Технически, с переменной data операций с массивами не существует. который имеет интерфейс DataSource.

Как правильно экспортировать интерфейс DataSource?

Ответы [ 2 ]

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

Вы должны использовать псевдоним типа

export type DataSource = DataEntry[];
1 голос
/ 28 мая 2020

Ваш интерфейс DataSource должен выглядеть так: -

interface DataSource extends Array<DataEntry>{}

Explaination

Раньше вы объявляли интерфейс как

export interface DataSource {[index: number]: DataEntry }

Это означает, что объект DataEntry вы можете объявить и использовать как

   let data: DataSource = {};
   dataSource[0] = {title: 'ABC', content: 'ABC'}

Выше может показаться, что вы присвоили объекту индекс 0, на самом деле вы устанавливаете ключ как 0, а его значение как объект выше.

Мой интерфейс только что расширил массив источников данных. Поскольку Array - это класс, который принимает общий c тип T. Я передал его T как DataEntry.

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