0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>В этом уроке мы познакомимся с сужением типов.</p>
1
<p>В этом уроке мы познакомимся с сужением типов.</p>
2
<h2>Использование сужения типа</h2>
2
<h2>Использование сужения типа</h2>
3
<p>В JavaScript часто встречается код, в котором в одних и тех же переменных могут быть значения разных типов. Они обрабатываются на основе логических проверок с помощью typeof и других подобных механизмов.</p>
3
<p>В JavaScript часто встречается код, в котором в одних и тех же переменных могут быть значения разных типов. Они обрабатываются на основе логических проверок с помощью typeof и других подобных механизмов.</p>
4
<p>Ниже пример реализации функции, которая конвертирует любое переданное значение в boolean:</p>
4
<p>Ниже пример реализации функции, которая конвертирует любое переданное значение в boolean:</p>
5
<p>В этом коде параметр имеет тип unknown. Внутри TypeScript позволяет выполнять с этим параметром разные действия. Они будут зависеть от заданных условий.</p>
5
<p>В этом коде параметр имеет тип unknown. Внутри TypeScript позволяет выполнять с этим параметром разные действия. Они будут зависеть от заданных условий.</p>
6
<p>В этом случае проверка типов выполняется статически до запуска кода. А условия внутри функции - это часть кода, который выполняется в рантайме, то есть во время запуска программы. Получается, что такой код должен был бы завершиться с ошибкой, но этого не происходит.</p>
6
<p>В этом случае проверка типов выполняется статически до запуска кода. А условия внутри функции - это часть кода, который выполняется в рантайме, то есть во время запуска программы. Получается, что такой код должен был бы завершиться с ошибкой, но этого не происходит.</p>
7
<p>Поскольку подобный код в JavaScript встречается часто, систему типов TypeScript пришлось доработать так, чтобы осталась возможность писать подобный код.</p>
7
<p>Поскольку подобный код в JavaScript встречается часто, систему типов TypeScript пришлось доработать так, чтобы осталась возможность писать подобный код.</p>
8
<p>В данном случае оказывается, что TypeScript умеет выполнять часть условных конструкций статически, как проверку совместимости типов, без запуска кода. Затем внутри блока с условием компилятор считает, что тип значения совпадает с тем, что было в самой проверке. Этот процесс в TypeScript называется<strong>Type Narrowing</strong>- сужение типа.</p>
8
<p>В данном случае оказывается, что TypeScript умеет выполнять часть условных конструкций статически, как проверку совместимости типов, без запуска кода. Затем внутри блока с условием компилятор считает, что тип значения совпадает с тем, что было в самой проверке. Этот процесс в TypeScript называется<strong>Type Narrowing</strong>- сужение типа.</p>
9
<p>Сужение типа работает не только для типа unknown. Это универсальный механизм, который работает со всеми возможными типами, например,<em>Union Types</em>:</p>
9
<p>Сужение типа работает не только для типа unknown. Это универсальный механизм, который работает со всеми возможными типами, например,<em>Union Types</em>:</p>
10
<p>Также switch поддерживает сужение типа:</p>
10
<p>Также switch поддерживает сужение типа:</p>
11
<p>Внутри каждого блока case тип значения сужается до того, что было в самом case. Перегрузка функций в TypeScript - это тоже пример работы сужения типов:</p>
11
<p>Внутри каждого блока case тип значения сужается до того, что было в самом case. Перегрузка функций в TypeScript - это тоже пример работы сужения типов:</p>
12
<p>Сужение типов - большая тема со множеством нюансов. Он часто встречается в TypeScript, поэтому с ним можно будет разобраться на постоянной практике. Подробнее с особенностями работы этого механизма можно ознакомиться в документации - ссылка в конце урока.</p>
12
<p>Сужение типов - большая тема со множеством нюансов. Он часто встречается в TypeScript, поэтому с ним можно будет разобраться на постоянной практике. Подробнее с особенностями работы этого механизма можно ознакомиться в документации - ссылка в конце урока.</p>