HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Иногда при работе с объектными типами нам нужно избежать дублирования полей и переиспользовать уже существующие поля. В таком случае можно использовать механизм поиска типов<em>Lookup Types</em>:</p>
1 <p>Иногда при работе с объектными типами нам нужно избежать дублирования полей и переиспользовать уже существующие поля. В таком случае можно использовать механизм поиска типов<em>Lookup Types</em>:</p>
2 <p>Конструкция Type[Key] выглядит и работает также, как получение значения объекта по ключу в JavaScript. Разница только в том, что доступ через точку тут не сработает.</p>
2 <p>Конструкция Type[Key] выглядит и работает также, как получение значения объекта по ключу в JavaScript. Разница только в том, что доступ через точку тут не сработает.</p>
3 <p>Кроме того, Lookup Types позволяет получить объединение типов из объекта по нескольким известным ключам, объединенным с помощью вертикальной черты |:</p>
3 <p>Кроме того, Lookup Types позволяет получить объединение типов из объекта по нескольким известным ключам, объединенным с помощью вертикальной черты |:</p>
4 <p>Чтобы получить объединение всех ключей из объекта, можно использовать оператор keyof. Давайте упростим наш пример:</p>
4 <p>Чтобы получить объединение всех ключей из объекта, можно использовать оператор keyof. Давайте упростим наш пример:</p>
5 <p>Обсудим, как не дублировать все поля одного объектного типа в другом типе. Для этого используются два вспомогательных типа:</p>
5 <p>Обсудим, как не дублировать все поля одного объектного типа в другом типе. Для этого используются два вспомогательных типа:</p>
6 <ul><li>Pick&lt;Type, Keys&gt; - создает объектный тип с ключами Keys из Type</li>
6 <ul><li>Pick&lt;Type, Keys&gt; - создает объектный тип с ключами Keys из Type</li>
7 <li>Omit&lt;Type, Keys&gt; - создает объектный тип, из которого исключаются ключи Keys из Type</li>
7 <li>Omit&lt;Type, Keys&gt; - создает объектный тип, из которого исключаются ключи Keys из Type</li>
8 </ul><p>Так это выглядит на практике:</p>
8 </ul><p>Так это выглядит на практике:</p>
9 <p>В этом примере мы получим один и тот же тип в результате и Pick&lt;Person, 'name' | 'age'&gt;, и Omit&lt;Person, 'location'&gt;.</p>
9 <p>В этом примере мы получим один и тот же тип в результате и Pick&lt;Person, 'name' | 'age'&gt;, и Omit&lt;Person, 'location'&gt;.</p>
10 <p>Все Utility Types в TypeScript написаны с помощью встроенных конструкций. Мы уже изучили достаточно много концепций TypeScript, чтобы начать в них разбираться. Попробуем разобраться, как они реализованы. Изучим этот вопрос на примере типа Pick:</p>
10 <p>Все Utility Types в TypeScript написаны с помощью встроенных конструкций. Мы уже изучили достаточно много концепций TypeScript, чтобы начать в них разбираться. Попробуем разобраться, как они реализованы. Изучим этот вопрос на примере типа Pick:</p>
11 <p>В коде выше мы видим тип Pick&lt;T, K&gt;. Это дженерик с двумя параметрами - T и K. На K мы также наложили ограничение extends keyof T, чтобы параметр K содержал перечисление ключей из T.</p>
11 <p>В коде выше мы видим тип Pick&lt;T, K&gt;. Это дженерик с двумя параметрами - T и K. На K мы также наложили ограничение extends keyof T, чтобы параметр K содержал перечисление ключей из T.</p>
12 <p>Далее с помощью оператора in выполняется перебор по всем элементам перечисления. Каждый полученный элемент становится ключом. Для его значения мы ищем подходящий тип в объектном типе T[P].</p>
12 <p>Далее с помощью оператора in выполняется перебор по всем элементам перечисления. Каждый полученный элемент становится ключом. Для его значения мы ищем подходящий тип в объектном типе T[P].</p>
13 <p>Операторы keyof (<em>Lookup Types</em>) и in (<em>Mapped Types</em>) часто идут вместе. С помощью keyof мы получаем доступ ко всем именам свойств объектного типа, а благодаря in можем циклически пройти по всем свойствам. Эти две операции являются ключевыми при создании своих вспомогательных типов при работе с объектными типами данных.</p>
13 <p>Операторы keyof (<em>Lookup Types</em>) и in (<em>Mapped Types</em>) часто идут вместе. С помощью keyof мы получаем доступ ко всем именам свойств объектного типа, а благодаря in можем циклически пройти по всем свойствам. Эти две операции являются ключевыми при создании своих вспомогательных типов при работе с объектными типами данных.</p>