В предыдущей статье я объяснил, что такое TypeScript Utility, и привел несколько примеров для Partial‹T›.

А теперь продолжаем разговор о другой утилите, которая называется Required‹Type›.

Это почти то же самое, что и Partial‹Type›, но работает наоборот.

Утилита Required помогает нам сделать все наши свойства обязательными, например ниже: у нас есть пользовательский интерфейс с некоторыми свойствами

и мы хотим пометить все эти свойства как обязательные, поэтому мы можем использовать утилиту Required:

и теперь, если мы наведем указатель мыши на UserRequired, мы увидим, что он работает правильно.

Чтобы сделать утилиту Required самостоятельно, мы можем сделать что-то вроде этого:

type MyOwnRequired<T> = { [P in keyof T]-?: T[P] };

и если мы создадим новый тип (например, назовем его RequiredUserType), мы увидим, что все свойства теперь обязательны.

Что у нас есть? Мы создали новый общий тип, названный MyOwnRequired, и взяли все ключи из переданного типа, используя [P in keoyf T]- ?

  • Т — пройденный тип,
  • P — ключ Т,
  • установить необязательный модификатор с помощью знака `-?` , это значит, удалить необязательный модификатор и установить его как обязательное поле,
  • T[P] — установить значение для динамического ключа, как мы обычно делаем с обычными объектами javascript.

Поэтому я рекомендую использовать утилиту Required по умолчанию, которую нам предоставляет TS. И теперь я уверен, что вы понимаете, как работает утилита Required под капотом.