Узнайте об одном из основных принципов TypeScript - проверке лишних свойств.
Один из основных принципов TypeScript заключается в том, что это система структурных типов.
Проще говоря, TypeScript вполне может иметь дополнительные свойства, если вы предоставляете type с его обязательными свойствами, давайте рассмотрим пример:
Но когда мы пытаемся напрямую присвоить объектный литерал:
И мы получаем следующую (и немного удивительную) ошибку:
Type ‘{ x: number; y: number; meaningOfLife: number; }’ is not assignable to type ‘Point’. Object literal may only specify known properties, and ‘meaningOfLife’ does not exist in type ‘Point’.
Когда TypeScript встречает литерал объекта в назначениях или при передаче в качестве аргумента функциям, он запускает действие, называемое проверкой избыточных свойств.
В отличие от структурной типизации, он проверяет, обладает ли объект точными свойствами. Как уже упоминалось, то же самое и с литералами объекта, передаваемыми в качестве аргумента функциям:
Интересно поведение с «слабыми типами» - типами, все поля которых помечены как Необязательные. В этом случае действие проверки лишних свойств происходит даже при назначении промежуточной переменной:
Обходные пути
Мы можем, хотя и не рекомендуется, обойти проверку лишних свойств.
Первый способ сделать это - использовать промежуточную переменную, так как вы сначала назначаете литерал объекта к нетипизированной переменной, и тогда второе присвоение не подвергается проверке лишних свойств:
Второй способ - использовать утверждения типа: