@oddwang

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

Возможно чего-то не понимаю, но хочу указать, что в массиве будет содержаться много однотипных объектов, как мне это указать? Указал interface:
const state: StateType = {
    user: 'User',
    columns: [
        {title: 'ToDo', cardList: []},
        {title: 'In progress', cardList: []},
        {title: 'Testing', cardList: []},
        {title: 'Done', cardList: []},
    ],
    cards: [],
}

interface StateType {
    user: string,
    columns: [
        {title: string, cardList: []}
    ]
}


В таком случае выдаёт следующую ошибку:
Тип "[{ title: string; cardList: []; }, { title: string; cardList: []; }, { title: string; cardList: []; }, { title: string; cardList: []; }]" не может быть назначен для типа "[{ title: string; cardList: []; }]".
  Число элементов в источнике — 4, но целевой объект разрешает только 1.
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
[ {title: string, cardList: []} ] - это не массив, заполняемый значениями типа {title: string, cardList: []}, это кортеж из одного значения данного типа.
Массив обозначается так Array<{title: string, cardList: []}> или так {title: string, cardList: []}[].
Кортеж используется когда нужно конкретное количество значений конкретного тип на конкретных позициях.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Kozack
@Kozack
Thinking about a11y
Примерно так

type ToDo = {title: 'ToDo', cardList: []}
type Testing = {title: 'Testing', cardList: []}

interface StateType {
    user: string,
    columns: (ToDo | Testing)[]
}

const state: StateType = {
    user: 'User',
    columns: [
        {title: 'ToDo', cardList: []},
        {title: 'Testing', cardList: []},
    ],
}


https://www.typescriptlang.org/play?#code/C4TwDgpg...

Или даже так:
enum kinds  {
    ToDo = 'ToDo',
    Testing = 'Testing',
}

type Column = {title: kinds, cardList: []}

interface StateType {
    user: string,
    columns: Column[]
}

const state: StateType = {
    user: 'User',
    columns: [
        {title: kinds.ToDo, cardList: []},
        {title: kinds.Testing, cardList: []},
    ],
}

https://www.typescriptlang.org/play?ssl=19&ssc=2&p...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Else Ростов-на-Дону
от 150 000 до 200 000 ₽
OWNR SOLUTIONS Нижний Новгород
от 150 000 до 250 000 ₽
FedAG Москва
До 40 000 ₽