Freshness
Last updated
Was this helpful?
Last updated
Was this helpful?
Чтобы упростить проверку типа литерала объекта, TypeScript предоставляет концепцию 「」 (также известную как более строгая проверка литерала объекта), чтобы гарантировать, что литералы объекта являются структурно совместимыми по типу.
Структурная типизация чрезвычайно удобна. Рассмотрим следующий пример кода, который позволяет легко переходить с JavaScript на TypeScript, а также обеспечивает безопасность типов:
Однако структурная типизация имеет недостаток: она может ввести вас в заблуждение, полагая, что что-то получает больше данных, чем на самом деле. В следующем примере TypeScript выдает предупреждение об ошибке:
Обратите внимание, что это сообщение об ошибке появляется только для литералов объекта.
Обратите внимание, что эта ошибка возникает только для литералов объекта. Без этой ошибки можно посмотреть на вызов logName({ name: 'matt', job: 'being awesome' })
и подумать, что logName
сделает что-то полезное с job
, тогда как в действительности оно полностью его игнорирует.
Другой вариант использования - использовать его с интерфейсами с необязательными элементами. Если такой проверки литерала объекта нет, при вводе неправильного слова предупреждение об ошибке не выдается:
Причина состоит в том, чтобы выполнять проверку типов только для литералов объекта, потому что в этом случае те атрибуты, которые фактически не используются, могут быть написаны с ошибками или неправильно использованы.
Тип может включать подпись индекса, чтобы было ясно, что можно использовать дополнительные атрибуты:
Facebook ReactJS предоставляет хороший пример использования Freshness объектов. Обычно в компонентах вы используете только несколько атрибутов вместо того, чтобы передавать все для вызова setState
:
Если вы хотите использовать Freshness, вам может потребоваться пометить всех участников как необязательных, которые все равно будут ловить опечатки: