Flow: почему ругается на необязательное свойство в объекте?

Пример кода по ссылке

Что там происходит. Функции map и renderItem работают с объектами типа Item, в которых должно быть свойство "name". Я передаю в эту функцию массив объектов типа User, у которого есть обязательное свойство "name", но есть и другие поля. Получаю ошибку.

Хотя в документации написано, что ошибки быть не должно. Что объекты с дополнительными свойствами использовать можно безопасно.

Что я делаю не так?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@i1yas
Тоже часто сталкивался с этой "проблемой". Фишка в том, что flow рассматривает самые худшие сценарии.
Вот ответ на SO
Такой тип позволяет сделать такую штуку:
function map(items: Array<Item>) {
  ...
  items.push({name: "Vasya"});
  ...
}
map(list)

Пушим объект типа Items, локально все ок, только мы его пушим в массив типа Array<Users>, у которого более строгий тип. Поэтому флоу ругается.
Решение:
function map<T: {name: string}>(items: Array<T>) {
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы