Невозможно различить тип переменной внутри цикла в машинописи - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь объявить список, который может быть заполнен типом «a» данных или типом «b» одновременно. Я понимаю, почему машинопись дает здесь ошибку, она не знает внутри цикла, будет ли пользовательский элемент данных внутри временной переменной внутри цикла иметь тип «a» или «b». Чего я не понимаю, так это как это исправить. Мне нужен массив, который может быть заполнен данными одного или другого типа одновременно.

ошибка: аргумент типа 'a | b 'не присваивается параметру типа' b '. Свойство extra_porperty отсутствует в типе «a», но требуется в типе «b».

interface a {
  id: number;
  first_name: string;
  last_name: string;
}

interface b extends a {
  extra_porperty: string;
}

interface c {
  user: a | b;
}

const newList: c[] = [];
const tempList: a[] | b[] = [];
newList.forEach((temp: c) => tempList.push(temp.user));

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Вы также можете установить дополнительные параметры с помощью '?':

interface a {
  id: number;
  first_name: string;
  last_name: string;
}

interface b extends a {
  extra_porperty?: string;
}

interface c {
  user: a | b;
}

const newList: c[] = [];
const tempList: a[] | b[] = [];
newList.forEach((temp: c) => tempList.push(temp.user));
0 голосов
/ 22 марта 2019

То, что вы сделали, утверждают, что tempList является либо массивом a, либо массивом b. Это означает, что весь список должен быть одного типа.

Что вам нужно сделать, это определить tempList как массив одного из этих двух типов, подобных этому

const tempList: (a | b)[] = [];

Это позволяет размещать элементы типа a или b внутри массива.

Посмотрите рабочий пример на игровой площадке здесь .

...