Обложка канала

Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

6354 @defront

Канал про фронтенд-разработку и не только. Небольшие посты и короткие пересказы статей, приправленные авторским мнением. Ведёт канал Александр Мышов из Яндекс.Маркета.

Defront (при поддержке Зарплата.ру) — про фронтенд-разработку и не только

5 лет назад
Открыть в
Неожиданное пересечение типов в TypeScript Стэфан Баумгартнер рассказал, в каких случаях могут возникать неожиданные пересечения типов, и что с ними делать — "TypeScript: Unexpected intersections". Неожиданное пересечение типов возникает при обновлении свойств объектов, если в качестве ключа используется переменная с объединением типов. В этом случае для ключа TypeScript будет использовать "наибольший общий делитель" в виде пересечения типов. В примере ниже таким "делителем" будет пересечение string & number, то есть тип never, из-за чего возникнет ошибка типизации:
interface Person {
  age: number;
  name: string;
}

function updatePersonByKey(
  person: Person,
  key: keyof Person,
  value: Person[keyof Person]
) {
  // тут будет ошибка типизации, так как
  // key превратится в пересечение типов `string & number`
  person[key] = value; 
}
Также неожиданное пересечение типов может возникнуть после деструктуризации объекта, так как деструктурированные свойства теряют связь с оригинальным типом. Полезная статья. Рекомендую почитать всем, кто использует TypeScript. #typescript fettblog.eu/typescr…sections
TypeScript: Unexpected intersections

Sometimes when writing TypeScript, some of the things you’d usually do in JavaScript work a little different and cause some weird, and puzzling situations. Sometimes you just want to assign a value to an object property and get a weird error like “Type ‘string | number’ is not assignable to type ‘never’. Type ‘string’ is not assignable to type ‘never’.(2322)”

fettblog.eu