Узнайте об одном из основных принципов 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 встречает литерал объекта в назначениях или при передаче в качестве аргумента функциям, он запускает действие, называемое проверкой избыточных свойств.

В отличие от структурной типизации, он проверяет, обладает ли объект точными свойствами. Как уже упоминалось, то же самое и с литералами объекта, передаваемыми в качестве аргумента функциям:

Интересно поведение с «слабыми типами» - типами, все поля которых помечены как Необязательные. В этом случае действие проверки лишних свойств происходит даже при назначении промежуточной переменной:

Обходные пути

Мы можем, хотя и не рекомендуется, обойти проверку лишних свойств.
Первый способ сделать это - использовать промежуточную переменную, так как вы сначала назначаете литерал объекта к нетипизированной переменной, и тогда второе присвоение не подвергается проверке лишних свойств:

Второй способ - использовать утверждения типа: