Skip to content

Commit f299f7d

Browse files
authored
Merge pull request #8 from JavaScript-Basic-OTUS/lesson12
Add lesson 12
2 parents 665567d + 0243d9c commit f299f7d

File tree

1 file changed

+217
-1
lines changed

1 file changed

+217
-1
lines changed

lessons/lesson12/lesson.md

Lines changed: 217 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,217 @@
1-
# Lesson 12
1+
---
2+
title: Занятие 12
3+
description: "Работа с типами, JSDoc и TypeScript. Генерация документации и линтинг JS-файлов с типами"
4+
---
5+
6+
# OTUS
7+
8+
## Javascript / TypeScript
9+
10+
<!--v-->
11+
12+
## Зачем документировать код?
13+
14+
- Не про комментарии, а про **описание интерфейсов** и API
15+
- Повышает читаемость и сопровождение
16+
- Улучшает работу команды и вхождение в проект
17+
- Используется IDE и автокомплитом
18+
19+
<!--v-->
20+
21+
## Что включает хорошая документация?
22+
23+
- Назначение модуля/функции
24+
- Типы входных и выходных данных
25+
- Примеры использования
26+
- Указание особенностей или ограничений
27+
28+
<!--v-->
29+
30+
## Именование: основа читаемости
31+
32+
- **Функции**: глаголы (`getUser`, `calculateTotal`)
33+
- **Модули**: предметная область (`authService`, `logger`)
34+
- **Переменные**:
35+
- булевы: `isValid`, `hasPermission`
36+
- коллекции: `users`, `items`
37+
- константы: `MAX_LENGTH`, `DEFAULT_TIMEOUT`
38+
39+
<!--v-->
40+
41+
## Примеры наименований
42+
43+
| Плохо | Хорошо |
44+
| --------- | ------------------ |
45+
| `data()` | `fetchUserData()` |
46+
| `check()` | `isAuthorized()` |
47+
| `calc()` | `calculatePrice()` |
48+
49+
<!--s-->
50+
51+
## Что такое JSDoc
52+
53+
<!--v-->
54+
55+
### Определение и цели
56+
57+
- JSDoc — способ аннотировать JS-код для понимания структуры и типов
58+
- Не требует TypeScript!
59+
- Работает в любом `.js` файле
60+
61+
<!--v-->
62+
63+
### Пример JSDoc
64+
65+
```js
66+
/**
67+
* Складывает два числа
68+
* @param {number} a Первое число
69+
* @param {number} b Второе число
70+
* @returns {number} Сумма
71+
*/
72+
function add(a, b) {
73+
return a + b;
74+
}
75+
```
76+
77+
<!--v-->
78+
79+
### Основные теги JSDoc
80+
81+
- `@param` — параметры функции
82+
- `@returns` — возвращаемое значение
83+
- `@example` — пример использования
84+
- `@typedef` — объявление типа
85+
- `@deprecated`, `@see`, `@throws` и др.
86+
87+
<!--v-->
88+
89+
### Как работает в редакторе
90+
91+
- Подсказки и типы при наведении
92+
- Автокомплит параметров и возвращаемых значений
93+
- Можно использовать без TS!
94+
95+
<!--s-->
96+
97+
## TypeScript и JSDoc
98+
99+
<!--v-->
100+
101+
### Чем TypeScript лучше JSDoc
102+
103+
| | JSDoc | TypeScript |
104+
| ----------- | ------------------- | -------------------- |
105+
| Простота || ❌ требует настройку |
106+
| Проверка | ограничена | ✅ строгая проверка |
107+
| IDE-помощь | 👍 | 🔥 лучшее качество |
108+
| Рефакторинг | ❌ (часто ломается) | ✅ надёжный |
109+
110+
<!--v-->
111+
112+
### Пример JSDoc и TS
113+
114+
**JSDoc:**
115+
116+
```js
117+
/** @param {string} name */
118+
function greet(name) {
119+
return "Hi, " + name;
120+
}
121+
```
122+
123+
**TypeScript:**
124+
125+
```ts
126+
function greet(name: string): string {
127+
return "Hi, " + name;
128+
}
129+
```
130+
131+
<!--v-->
132+
133+
### Гибридный режим
134+
135+
- `.js` + JSDoc + `tsconfig.json`
136+
- Получаем линтинг и автотипизацию без перехода на `.ts`
137+
138+
<!--s-->
139+
140+
## Генерация документации
141+
142+
<!--v-->
143+
144+
### С помощью JSDoc
145+
146+
```bash
147+
npm install --save-dev jsdoc
148+
npx jsdoc src -r -d docs
149+
```
150+
151+
- Генерирует HTML-документацию по комментариям
152+
153+
<!--v-->
154+
155+
### С помощью TypeDoc (для TS)
156+
157+
```bash
158+
npm install --save-dev typedoc
159+
npx typedoc src
160+
```
161+
162+
- Создаёт красивую документацию с ссылками между типами и интерфейсами
163+
164+
<!--s-->
165+
166+
## TypeScript для линтинга JS
167+
168+
<!--v-->
169+
170+
### Пример `tsconfig.json`
171+
172+
```json
173+
{
174+
"compilerOptions": {
175+
"allowJs": true,
176+
"checkJs": true,
177+
"noEmit": true,
178+
"strict": true
179+
},
180+
"include": ["src"]
181+
}
182+
```
183+
184+
<!--v-->
185+
186+
### Что даёт `checkJs`
187+
188+
- TypeScript **проверяет** `.js` файлы
189+
- Учитывает типы из JSDoc
190+
- Показывает ошибки типов до выполнения
191+
192+
<!--v-->
193+
194+
### Пример ошибки:
195+
196+
```js
197+
/** @param {number} x */
198+
function double(x) {
199+
return x * "2"; // ❌ ошибка типов
200+
}
201+
```
202+
203+
<!--s-->
204+
205+
## Выводы
206+
207+
<!--v-->
208+
209+
- Документация = ясное API, а не просто комментарии
210+
- JSDoc помогает даже без TypeScript
211+
- TS усиливает надёжность и масштабируемость
212+
- Документацию можно генерировать автоматически
213+
- TypeScript умеет проверять `.js`-файлы с JSDoc
214+
215+
<!--v-->
216+
217+
### Вопросы? 🙋‍♀️🙋‍♂️

0 commit comments

Comments
 (0)