HTML Diff
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>