HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>TypeScript на нашем проекте дается как второй язык. Поэтому чтобы лучше понимать материал курса, стоит владеть JavaScript или другими языками программирования. Также нужно иметь представление о типах данных, переменных, условных конструкциях, циклах, функциях, свойствах и методах объектов, а также анонимных или лямбда-функциях. Изучать второй язык проще первого, поэтому и структура материала сильно меняется. Здесь мы обзорно касаемся базовых конструкций, чтобы быстро познакомиться с синтаксисом. Далее переходим к задачам, ради которых и изучается TypeScript.</p>
1 <p>TypeScript на нашем проекте дается как второй язык. Поэтому чтобы лучше понимать материал курса, стоит владеть JavaScript или другими языками программирования. Также нужно иметь представление о типах данных, переменных, условных конструкциях, циклах, функциях, свойствах и методах объектов, а также анонимных или лямбда-функциях. Изучать второй язык проще первого, поэтому и структура материала сильно меняется. Здесь мы обзорно касаемся базовых конструкций, чтобы быстро познакомиться с синтаксисом. Далее переходим к задачам, ради которых и изучается TypeScript.</p>
2 <p>В этом уроке мы узнаем, что такое TypeScript, а также разберем его особенности, установку и запуск.</p>
2 <p>В этом уроке мы узнаем, что такое TypeScript, а также разберем его особенности, установку и запуск.</p>
3 <h2>Что такое TypeScript</h2>
3 <h2>Что такое TypeScript</h2>
4 <p>TypeScript - это JavaScript с дополнительным синтаксисом для указания типов данных. Первый относится к статически типизированным языкам, второй - к динамически типизированным. Чтобы подробнее познакомиться с TypeScript, сравним его с JavaScript.</p>
4 <p>TypeScript - это JavaScript с дополнительным синтаксисом для указания типов данных. Первый относится к статически типизированным языкам, второй - к динамически типизированным. Чтобы подробнее познакомиться с TypeScript, сравним его с JavaScript.</p>
5 <p>У динамически типизированных языков по типу JavaScript есть интерпретатор - программа, которая выполняет код построчно без предварительного анализа:</p>
5 <p>У динамически типизированных языков по типу JavaScript есть интерпретатор - программа, которая выполняет код построчно без предварительного анализа:</p>
6 <p>Если в таком коде есть ошибки типов, например, в функцию вместо обычного числа пришло число типа BigInt, то об ошибке мы узнаем только во время запуска кода:</p>
6 <p>Если в таком коде есть ошибки типов, например, в функцию вместо обычного числа пришло число типа BigInt, то об ошибке мы узнаем только во время запуска кода:</p>
7 <p>Статически типизированные языки по типу TypeScript работают по-другому. У них есть ряд преимуществ:</p>
7 <p>Статически типизированные языки по типу TypeScript работают по-другому. У них есть ряд преимуществ:</p>
8 <ul><li>Нахождение некоторых видов ошибок еще до запуска кода</li>
8 <ul><li>Нахождение некоторых видов ошибок еще до запуска кода</li>
9 <li>Более простой рефакторинг кода</li>
9 <li>Более простой рефакторинг кода</li>
10 <li>Полная поддержка возможностей редактора - автодополнения, навигации по коду и прочее</li>
10 <li>Полная поддержка возможностей редактора - автодополнения, навигации по коду и прочее</li>
11 </ul><p>Перед запуском кода в TypeScript на выполнение его нужно скомпилировать.</p>
11 </ul><p>Перед запуском кода в TypeScript на выполнение его нужно скомпилировать.</p>
12 <p>Во время компиляции проверяется, что программа<strong>типобезопасна</strong>- не содержит ошибок, подобных примеру выше. Если компилятор нашел несоответствие типов, то он останавливает компиляцию и выводит предупреждения о том, где типы не сходятся.</p>
12 <p>Во время компиляции проверяется, что программа<strong>типобезопасна</strong>- не содержит ошибок, подобных примеру выше. Если компилятор нашел несоответствие типов, то он останавливает компиляцию и выводит предупреждения о том, где типы не сходятся.</p>
13 <p>Тот же пример на TypeScript:</p>
13 <p>Тот же пример на TypeScript:</p>
14 <p>Код выше не только не запустится на исполнение, но и не пройдет компиляцию. Компилятор TypeScript остановит выполнение и укажет на ошибку несоответствия типов.</p>
14 <p>Код выше не только не запустится на исполнение, но и не пройдет компиляцию. Компилятор TypeScript остановит выполнение и укажет на ошибку несоответствия типов.</p>
15 <p>Если посмотреть на определение функции, то можно увидеть, что перед нами практически тот же JavaScript, за исключением описания типов входных переменных функции. Там указано, что у параметров a и b тип number. Примерно так же аннотируется типами и остальной код на TypeScript. Местами описания типов могут быть очень сложными, но сама идея остается прежней.</p>
15 <p>Если посмотреть на определение функции, то можно увидеть, что перед нами практически тот же JavaScript, за исключением описания типов входных переменных функции. Там указано, что у параметров a и b тип number. Примерно так же аннотируется типами и остальной код на TypeScript. Местами описания типов могут быть очень сложными, но сама идея остается прежней.</p>
16 <p>Нельзя сказать однозначно, какой подход лучше - статическая или динамическая типизация. Всё зависит от конкретной ситуации, а успешные проекты могут быть на разных языках.</p>
16 <p>Нельзя сказать однозначно, какой подход лучше - статическая или динамическая типизация. Всё зависит от конкретной ситуации, а успешные проекты могут быть на разных языках.</p>
17 <h2>Какие особенности у TypeScript</h2>
17 <h2>Какие особенности у TypeScript</h2>
18 <p>TypeScript стал одним из самых популярных типизированных языков, потому что:</p>
18 <p>TypeScript стал одним из самых популярных типизированных языков, потому что:</p>
19 <ul><li>Его разработала компания Microsoft</li>
19 <ul><li>Его разработала компания Microsoft</li>
20 <li>Он почти полностью совместим с JavaScript с точки зрения возможностей и типов - другими словами, это "JavaScript с описанием типов" или "надмножество языка JavaScript"</li>
20 <li>Он почти полностью совместим с JavaScript с точки зрения возможностей и типов - другими словами, это "JavaScript с описанием типов" или "надмножество языка JavaScript"</li>
21 <li>Его компилятор поддерживает<strong>транспиляцию</strong>- умеет превращать TypeScript-код в JavaScript-код, удаляя определения типов</li>
21 <li>Его компилятор поддерживает<strong>транспиляцию</strong>- умеет превращать TypeScript-код в JavaScript-код, удаляя определения типов</li>
22 <li>У него строгая типизация</li>
22 <li>У него строгая типизация</li>
23 </ul><p>Последнюю особенность разберем подробнее.</p>
23 </ul><p>Последнюю особенность разберем подробнее.</p>
24 <h3>Строгая типизация</h3>
24 <h3>Строгая типизация</h3>
25 <p>Строгая типизация не связана со статической. Она говорит о том, насколько язык допускает автоматические преобразования типов. То есть статический язык может быть нестрогим, и наоборот.</p>
25 <p>Строгая типизация не связана со статической. Она говорит о том, насколько язык допускает автоматические преобразования типов. То есть статический язык может быть нестрогим, и наоборот.</p>
26 <p>Например, в JavaScript мы можем сложить число со строкой. Когда язык встречает такую конструкцию, он автоматически выполнит преобразование типов: 10 + 'one'. В TypeScript так не получится. Он выдаст ошибку:</p>
26 <p>Например, в JavaScript мы можем сложить число со строкой. Когда язык встречает такую конструкцию, он автоматически выполнит преобразование типов: 10 + 'one'. В TypeScript так не получится. Он выдаст ошибку:</p>
27 <blockquote><p><em>The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type</em></p>
27 <blockquote><p><em>The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type</em></p>
28 </blockquote><p>Многие динамические языки строго типизированы. Например, к ним относятся Ruby и Python. Строгая типизация делает язык только лучше и не усложняет процесс программирования.</p>
28 </blockquote><p>Многие динамические языки строго типизированы. Например, к ним относятся Ruby и Python. Строгая типизация делает язык только лучше и не усложняет процесс программирования.</p>
29 <p>Мы разобрали преимущества и особенности TypeScript. Теперь можно научиться его устанавливать.</p>
29 <p>Мы разобрали преимущества и особенности TypeScript. Теперь можно научиться его устанавливать.</p>
30 <h2>Как устанавливать и запускать TypeScript</h2>
30 <h2>Как устанавливать и запускать TypeScript</h2>
31 <p>Сам TypeScript написан на TypeScript, который затем транспилируется в JavaScript и распространяется как обычный NPM-пакет. Поэтому установка TypeScript предельно простая:</p>
31 <p>Сам TypeScript написан на TypeScript, который затем транспилируется в JavaScript и распространяется как обычный NPM-пакет. Поэтому установка TypeScript предельно простая:</p>
32 <p>Затем нужно создать файлы с кодом на TypeScript. Они имеют расширение<em>ts</em>. Компилятор TypeScript доступен через утилиту tsc:</p>
32 <p>Затем нужно создать файлы с кодом на TypeScript. Они имеют расширение<em>ts</em>. Компилятор TypeScript доступен через утилиту tsc:</p>
33 <p>На выходе получается файл с JavaScript-кодом, который уже можно запускать с помощью Node.js:</p>
33 <p>На выходе получается файл с JavaScript-кодом, который уже можно запускать с помощью Node.js:</p>
34 <p>Также можно поставить пакет<a>ts-node</a>, который выполняет одновременно компиляцию и запуск. Этот пакет предоставляет REPL для экспериментов с TypeScript.</p>
34 <p>Также можно поставить пакет<a>ts-node</a>, который выполняет одновременно компиляцию и запуск. Этот пакет предоставляет REPL для экспериментов с TypeScript.</p>
35 <p>В этом уроке мы познакомились с языком TypeScript. Мы узнали, что это тот же JavaScript, но с дополнительным синтаксисом для указания типов данных.</p>
35 <p>В этом уроке мы познакомились с языком TypeScript. Мы узнали, что это тот же JavaScript, но с дополнительным синтаксисом для указания типов данных.</p>
36 <p>При этом нельзя сказать, какой из языков лучше. Всё зависит от конкретной задачи и особенности языка.</p>
36 <p>При этом нельзя сказать, какой из языков лучше. Всё зависит от конкретной задачи и особенности языка.</p>
37 <p>С особенностями TypeScript мы также познакомились в этом уроке, а еще научились его устанавливать и запускать.</p>
37 <p>С особенностями TypeScript мы также познакомились в этом уроке, а еще научились его устанавливать и запускать.</p>