lavezzi1
@lavezzi1

Почему нет ошибки при присваивании массива из других интерфейсов?

Всем привет. Прошел курс для начинающих по TS и начал внедрять в проект Vue 3.

Есть функция REST API, которая вытаскивает данные вида: { meta, volumes }

export const getVolumes = (
  params: RequestMeta,
): Promise<{ meta: RequestMeta, volumes: Volume[] }> => request({
  url: '/volumes/',
  params,
});


Дальше на странице data выглядит так:

data() {
  return {
    volumes: [] as Array<Volume>,
  };
}


И вот тут самое интересное, тянем данные и кладем в ранее заданный массив:

methods: {
  fetchVolumes() {
    getVolumes().then((data) => {
        this.volumes = data.volumes;
    });
  }
}


Все работает замечательно, но! Если я заменю API функцию с getVolumes() на getSnapshots() и положу в this.volumes = data.snapshots, массив типов Snapshot, то никакой ошибки не будет. Почему так?
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
В ts структурная типизация. Такое может происходить если Snapshot структурно укладывается в тип Volume.

Т.е. вот так типы взаимозаменяемы:
interface Volume {
 id: number;
 volume?: string;
}

interface Snapshot {
 id: number;
 snapshot?: string;
}
А так нет:
interface Volume {
 id: number;
 volume: string;
}

interface Snapshot {
 id: number;
 snapshot: string;
}

И так нет:
interface Volume {
 id?: number;
}

interface Snapshot {
 id?: string;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы