0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>TypeScript (TS) позволяет использовать аннотации типов в коде JavaScript. TS даже может проверять код при сборке, благодаря чему вы увидите ошибки до того, как они попадут в продакшен. Вы избавитесь от undefined is not a function навсегда.</p>
1
<p>TypeScript (TS) позволяет использовать аннотации типов в коде JavaScript. TS даже может проверять код при сборке, благодаря чему вы увидите ошибки до того, как они попадут в продакшен. Вы избавитесь от undefined is not a function навсегда.</p>
2
<p>TypeScript по умолчанию требует некоторых изменений при настройке окружения. Вам придётся переименовать файлы JavaScript в .ts, .tsx, а также использовать компиляторы tsc или Babel.</p>
2
<p>TypeScript по умолчанию требует некоторых изменений при настройке окружения. Вам придётся переименовать файлы JavaScript в .ts, .tsx, а также использовать компиляторы tsc или Babel.</p>
3
<h2>Содержание</h2>
3
<h2>Содержание</h2>
4
<ul><li><a>Синтаксис TypeScript</a></li>
4
<ul><li><a>Синтаксис TypeScript</a></li>
5
<li><a>Документируем JavaScript</a></li>
5
<li><a>Документируем JavaScript</a></li>
6
<li><a>Установка TypeScript</a></li>
6
<li><a>Установка TypeScript</a></li>
7
<li><a>Базовые аннотации</a></li>
7
<li><a>Базовые аннотации</a></li>
8
<li><a>Документирование параметров</a></li>
8
<li><a>Документирование параметров</a></li>
9
<li><a>Утверждения типов (Type Assertions)</a></li>
9
<li><a>Утверждения типов (Type Assertions)</a></li>
10
<li><a>Импорт определений типов</a></li>
10
<li><a>Импорт определений типов</a></li>
11
<li><a>Определение типов в файлах JavaScript</a></li>
11
<li><a>Определение типов в файлах JavaScript</a></li>
12
<li><a>Определение типов в React</a></li>
12
<li><a>Определение типов в React</a></li>
13
<li><a>Расширенные возможности</a></li>
13
<li><a>Расширенные возможности</a></li>
14
<li><a>Резюме</a></li>
14
<li><a>Резюме</a></li>
15
</ul><h2>Синтаксис TypeScript</h2>
15
</ul><h2>Синтаксис TypeScript</h2>
16
<p>Часто людям не нравится работать с TypeScript из-за необходимости использовать новый для них синтаксис. Если вам знакома эта ситуация, статья как раз для вас.</p>
16
<p>Часто людям не нравится работать с TypeScript из-за необходимости использовать новый для них синтаксис. Если вам знакома эта ситуация, статья как раз для вас.</p>
17
<p>Синтаксис TypeScript позволяет использовать аннотации типов инлайн. Но сначала поговорим об альтернативах.</p>
17
<p>Синтаксис TypeScript позволяет использовать аннотации типов инлайн. Но сначала поговорим об альтернативах.</p>
18
<h2>Документируем JavaScript</h2>
18
<h2>Документируем JavaScript</h2>
19
<h3>Синтаксис JSDoc</h3>
19
<h3>Синтаксис JSDoc</h3>
20
<p>TypeScript можно документировать с помощью<a>JSDoc</a>. Это стандартный синтаксис для документирования JavaScript. JSDoc используется для создания документации, но TypeScript понимает аннотации типов, созданные с помощью этого инструмента.</p>
20
<p>TypeScript можно документировать с помощью<a>JSDoc</a>. Это стандартный синтаксис для документирования JavaScript. JSDoc используется для создания документации, но TypeScript понимает аннотации типов, созданные с помощью этого инструмента.</p>
21
<p>Это значит, что у вас есть возможности использовать преимущество TypeScript, в частности, проверку типов, без необходимости конвертировать весь код.</p>
21
<p>Это значит, что у вас есть возможности использовать преимущество TypeScript, в частности, проверку типов, без необходимости конвертировать весь код.</p>
22
<h3>Почему JSDoc</h3>
22
<h3>Почему JSDoc</h3>
23
<p>Применение JSDoc - полезная практика, даже если вы не используете TypeScript. Фактически это стандарт документирования JavaScript, и его поддерживают разные инструменты и редакторы.</p>
23
<p>Применение JSDoc - полезная практика, даже если вы не используете TypeScript. Фактически это стандарт документирования JavaScript, и его поддерживают разные инструменты и редакторы.</p>
24
<p>Если вы уже применяете JSDoc, вам будет удобно использовать проверку типов в коде, аналогичную той, которая применяется в TypeScript. Для этого нужно уделить время настройке TypeScript.</p>
24
<p>Если вы уже применяете JSDoc, вам будет удобно использовать проверку типов в коде, аналогичную той, которая применяется в TypeScript. Для этого нужно уделить время настройке TypeScript.</p>
25
<h2>Установка TypeScript</h2>
25
<h2>Установка TypeScript</h2>
26
<h3>Как установить TypeScript</h3>
26
<h3>Как установить TypeScript</h3>
27
<p>Чтобы установить в проект TypeScript, используйте такую команду:</p>
27
<p>Чтобы установить в проект TypeScript, используйте такую команду:</p>
28
<h3>Как включить проверку типов JSDoc</h3>
28
<h3>Как включить проверку типов JSDoc</h3>
29
<p>Теперь нужно настроить TypeScript, чтобы он проверял код в файлах JavaScript. По умолчанию он проверяет только файлы с расширением .ts. Настройки TypeScript надо указывать в файле tsconfig.json. Обратите внимание на опцию noEmit. Мы используем её, так как планируем применять TypeScript только для проверки типов.</p>
29
<p>Теперь нужно настроить TypeScript, чтобы он проверял код в файлах JavaScript. По умолчанию он проверяет только файлы с расширением .ts. Настройки TypeScript надо указывать в файле tsconfig.json. Обратите внимание на опцию noEmit. Мы используем её, так как планируем применять TypeScript только для проверки типов.</p>
30
<h3>Настраиваем TypeScript</h3>
30
<h3>Настраиваем TypeScript</h3>
31
<p>В начале файлов .js, в которых вам нужна проверка типов, добавьте комментарий:</p>
31
<p>В начале файлов .js, в которых вам нужна проверка типов, добавьте комментарий:</p>
32
<p>Запустите проверку типов. Это можно сделать с помощью команды:</p>
32
<p>Запустите проверку типов. Это можно сделать с помощью команды:</p>
33
<p>Рекомендуется использовать проверку типов также в инструментах непрерывной интеграции (CI).</p>
33
<p>Рекомендуется использовать проверку типов также в инструментах непрерывной интеграции (CI).</p>
34
<p>Дальше поговорим о документировании кода с помощью JSDoc.</p>
34
<p>Дальше поговорим о документировании кода с помощью JSDoc.</p>
35
<h2>Базовые аннотации</h2>
35
<h2>Базовые аннотации</h2>
36
<h3>Аннотации параметров функций</h3>
36
<h3>Аннотации параметров функций</h3>
37
<p>Для аннотации параметров функций используйте @param. Его нужно указать в комментариях JSDoc, которые начинаются с двух идущих подряд астериксов.</p>
37
<p>Для аннотации параметров функций используйте @param. Его нужно указать в комментариях JSDoc, которые начинаются с двух идущих подряд астериксов.</p>
38
<h3>Документирование кода</h3>
38
<h3>Документирование кода</h3>
39
<p>JSDoc - инструмент для документирования. Кроме добавления аннотаций типов, вы можете документировать функции.</p>
39
<p>JSDoc - инструмент для документирования. Кроме добавления аннотаций типов, вы можете документировать функции.</p>
40
<p>Потренируемся в документировании.</p>
40
<p>Потренируемся в документировании.</p>
41
<h2>Документирование параметров</h2>
41
<h2>Документирование параметров</h2>
42
<h3>Опциональные типы</h3>
42
<h3>Опциональные типы</h3>
43
<p>Чтобы показать опциональность типа, добавьте после него знак равенства. В примере ниже number= - то же самое, что и number | null | undefined. Такой синтаксис можно использовать только в типах JSDoc.</p>
43
<p>Чтобы показать опциональность типа, добавьте после него знак равенства. В примере ниже number= - то же самое, что и number | null | undefined. Такой синтаксис можно использовать только в типах JSDoc.</p>
44
<h3>Документируем опции</h3>
44
<h3>Документируем опции</h3>
45
<p>Вы можете документировать свойства параметров, например, options.count или options.separator. Эту возможность можно использовать для документирования props в функциональных компонентах React.</p>
45
<p>Вы можете документировать свойства параметров, например, options.count или options.separator. Эту возможность можно использовать для документирования props в функциональных компонентах React.</p>
46
<h2>Утверждения типов (Type Assertions)</h2>
46
<h2>Утверждения типов (Type Assertions)</h2>
47
<h3>Переменные</h3>
47
<h3>Переменные</h3>
48
<p>Используйте @type, когда пишете инлайн определение для аргументов функций. Это обычно избыточно для констант, так как TypeScript чётко работает с типами. Подход полезен при работе с изменяемыми данными, например, с переменными.</p>
48
<p>Используйте @type, когда пишете инлайн определение для аргументов функций. Это обычно избыточно для констант, так как TypeScript чётко работает с типами. Подход полезен при работе с изменяемыми данными, например, с переменными.</p>
49
<h3>Параметры функций</h3>
49
<h3>Параметры функций</h3>
50
<p>@type можно использовать для определения типов аргументов функций инлайн. Это особенно удобно при работе с анонимными функциями.</p>
50
<p>@type можно использовать для определения типов аргументов функций инлайн. Это особенно удобно при работе с анонимными функциями.</p>
51
<p>Далее поговорим о выносе определений типов в отдельные файлы.</p>
51
<p>Далее поговорим о выносе определений типов в отдельные файлы.</p>
52
<h2>Импорт определений типов</h2>
52
<h2>Импорт определений типов</h2>
53
<h3>Импортируем типы</h3>
53
<h3>Импортируем типы</h3>
54
<p>Сложные и переиспользуемые типы лучше определять во внешних файлах. Они имеют расширение .d.ts. Обратите внимание, это должны быть именно файлы TypeScript. Импортировать определения из файлов JavaScript невозможно.</p>
54
<p>Сложные и переиспользуемые типы лучше определять во внешних файлах. Они имеют расширение .d.ts. Обратите внимание, это должны быть именно файлы TypeScript. Импортировать определения из файлов JavaScript невозможно.</p>
55
<p>Типы можно импортировать с помощью представленного ниже синтаксиса. Определения должны определяться во внешних файлах с расширением .d.ts, как сказано выше.</p>
55
<p>Типы можно импортировать с помощью представленного ниже синтаксиса. Определения должны определяться во внешних файлах с расширением .d.ts, как сказано выше.</p>
56
<h3>Определяем типы во внешних файлах</h3>
56
<h3>Определяем типы во внешних файлах</h3>
57
<p>Ниже представлен синтаксис определения типов во внешних файлах TypeScript. Ещё раз обратите внимание, импортировать определения типов из файлов JavaScript невозможно.</p>
57
<p>Ниже представлен синтаксис определения типов во внешних файлах TypeScript. Ещё раз обратите внимание, импортировать определения типов из файлов JavaScript невозможно.</p>
58
<p>Теперь разберёмся, можно ли определять типы в JavaScript-файлах.</p>
58
<p>Теперь разберёмся, можно ли определять типы в JavaScript-файлах.</p>
59
<h2>Определение типов в файлах JavaScript</h2>
59
<h2>Определение типов в файлах JavaScript</h2>
60
<h3>Типы объектов</h3>
60
<h3>Типы объектов</h3>
61
<p>Для определения типов объектов используйте @typedef. Предпочтительно делать это во внешних файлах с расширением .d.ts. Но вы можете использовать представленный ниже синтаксис и в файлах JavaScript.</p>
61
<p>Для определения типов объектов используйте @typedef. Предпочтительно делать это во внешних файлах с расширением .d.ts. Но вы можете использовать представленный ниже синтаксис и в файлах JavaScript.</p>
62
<h3>Объединение типов</h3>
62
<h3>Объединение типов</h3>
63
<p>Используйте объединение типов (|) для определения двух или более возможных вариантов. Для простоты используйте @typedef.</p>
63
<p>Используйте объединение типов (|) для определения двух или более возможных вариантов. Для простоты используйте @typedef.</p>
64
<p>Как насчёт React?</p>
64
<p>Как насчёт React?</p>
65
<h2>Определение типов в React</h2>
65
<h2>Определение типов в React</h2>
66
<h3>Функциональные компоненты</h3>
66
<h3>Функциональные компоненты</h3>
67
<p>Функциональные компоненты представляют собой функции. Поэтому вы можете документировать их способами, о которых говорилось выше в разделе о документировании функций. В следующем примере показано документирование с помощью типов объектов.</p>
67
<p>Функциональные компоненты представляют собой функции. Поэтому вы можете документировать их способами, о которых говорилось выше в разделе о документировании функций. В следующем примере показано документирование с помощью типов объектов.</p>
68
<blockquote><p>Подробности о функциональных компонентах можно узнать в курсе по React, который входит<a>в профессию "Фронтенд JavaScript"</a>.</p>
68
<blockquote><p>Подробности о функциональных компонентах можно узнать в курсе по React, который входит<a>в профессию "Фронтенд JavaScript"</a>.</p>
69
</blockquote><h3>Компоненты на классах</h3>
69
</blockquote><h3>Компоненты на классах</h3>
70
<p>Используйте @extends для определения типов props и state. Также для решения этой задачи можно использовать @typedef инлайн или с импортом.</p>
70
<p>Используйте @extends для определения типов props и state. Также для решения этой задачи можно использовать @typedef инлайн или с импортом.</p>
71
<h2>Расширенные возможности</h2>
71
<h2>Расширенные возможности</h2>
72
<p>Синтаксис JSDoc не такой выразительный, как TypeScript, но эти инструменты всё-таки похожи. Ниже перечислены некоторые дополнительные возможности TS, доступные в JSDoc.</p>
72
<p>Синтаксис JSDoc не такой выразительный, как TypeScript, но эти инструменты всё-таки похожи. Ниже перечислены некоторые дополнительные возможности TS, доступные в JSDoc.</p>
73
<ul><li>Темплейты - @templates.</li>
73
<ul><li>Темплейты - @templates.</li>
74
<li>Возврат значений - @returns.</li>
74
<li>Возврат значений - @returns.</li>
75
<li>Условия типов - @returns.</li>
75
<li>Условия типов - @returns.</li>
76
<li>Функциональные типы - @callback.</li>
76
<li>Функциональные типы - @callback.</li>
77
<li>Перечисления - @enum.</li>
77
<li>Перечисления - @enum.</li>
78
</ul><p>Ещё больше возможностей найдёте<a>в официальной документации</a>.</p>
78
</ul><p>Ещё больше возможностей найдёте<a>в официальной документации</a>.</p>
79
<h2>Резюме</h2>
79
<h2>Резюме</h2>
80
<p>Ниже представлены перечисленные в статье способы работы с аннотациями типов.</p>
80
<p>Ниже представлены перечисленные в статье способы работы с аннотациями типов.</p>
81
<p><strong>Проверка типов JavaScript</strong></p>
81
<p><strong>Проверка типов JavaScript</strong></p>
82
<p><strong>Документирование функций</strong></p>
82
<p><strong>Документирование функций</strong></p>
83
<p><strong>Импорт определений типов (позволяет определять типы во внешних файлах)</strong></p>
83
<p><strong>Импорт определений типов (позволяет определять типы во внешних файлах)</strong></p>
84
<p><strong>Опциональные типы</strong></p>
84
<p><strong>Опциональные типы</strong></p>
85
<p><strong>Анонимные функции</strong></p>
85
<p><strong>Анонимные функции</strong></p>
86
<p><strong>Документирование свойств параметров объектов</strong></p>
86
<p><strong>Документирование свойств параметров объектов</strong></p>
87
<p><em>Адаптированный перевод статьи<a>Type annotations in JavaScript</a>files by Rico Sta. Cruz. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.</em></p>
87
<p><em>Адаптированный перевод статьи<a>Type annotations in JavaScript</a>files by Rico Sta. Cruz. Мнение администрации Хекслета может не совпадать с мнением автора оригинальной публикации.</em></p>