Skip to content

Commit e19ced8

Browse files
authored
Lesson 28 (#64)
1 parent 4d567f7 commit e19ced8

3 files changed

Lines changed: 128 additions & 0 deletions

File tree

.yaspellerrc.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ module.exports = {
146146
"ts",
147147
"tsd",
148148
"tsdef",
149+
"tsdoc",
149150
"TSLint",
150151
"typeof",
151152
"U pdate",
@@ -183,6 +184,7 @@ module.exports = {
183184
"гугл",
184185
"деплой",
185186
"деплоя",
187+
"дженерики",
186188
"десериализация",
187189
"диспатчу",
188190
"дождидесь",

lessons/lesson27/lecture.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,3 +454,4 @@ function isFish(pet: Fish | Bird): pet is Fish {
454454
- [TypeScript: Обобщённые типы](https://canonium.com/articles/typescript-generics/)
455455
- [Обобщенные типы и классы. Документация TypeScript](http://typescript-lang.ru/docs/Generics.html)
456456
- [Typescript: Объединение типов в глубину](https://habr.com/ru/post/526998/)
457+
- [Продвинутые дженерики в TypeScript — Александр Николаичев](https://www.youtube.com/watch?v=YDTZpQrBXjc)

lessons/lesson28/lecture.md

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
---
2+
title: Занятие 28
3+
description: Разработка собственного API
4+
---
5+
6+
# OTUS
7+
8+
## Javascript Basic
9+
10+
<!-- v -->
11+
12+
### Вопросы?
13+
14+
<!-- s -->
15+
16+
### Разработка собственного API
17+
18+
<!-- v -->
19+
20+
Что такое `API` ?
21+
22+
<!-- v -->
23+
24+
Именование:
25+
26+
- типы и интерфейсы описывают ЧТО происходит
27+
- реализации могут говорить, как это происходит
28+
29+
<!-- v -->
30+
31+
```ts
32+
interface Storage {
33+
getItem(key: string): string | null;
34+
setItem(key: string, value: any): void;
35+
}
36+
37+
class LocalStorage implements Storage {}
38+
```
39+
40+
<!-- v -->
41+
42+
Документирование интерфейсов
43+
44+
- публичные свойства и методы
45+
- для методов определяем типы принимаемых аргументов, и тип возвращаемого значения
46+
- при необходимости типизируем контекст (`this`)
47+
48+
<!-- v -->
49+
50+
Передача параметров:
51+
52+
- Передача параметров через конфигурационный объект
53+
- Ограничивать число параметров 3 мя (и дальше переходить на конфигурационный объект)
54+
55+
<!-- v -->
56+
57+
```ts
58+
function draw1(color: string, x: number, y: number): void {}
59+
function draw2({
60+
color,
61+
x,
62+
y,
63+
}: {
64+
color: string;
65+
x: number;
66+
y: number;
67+
}): void {}
68+
```
69+
70+
<!-- v -->
71+
72+
Асинхронный / синхронный интерфейс
73+
74+
<!-- v -->
75+
76+
Универсальный подход - делать **весь** код асинхронным. Но это плохо сказывается на производительности.
77+
78+
Минимальный список задач для асинхронных интерфейсов:
79+
80+
- чтение/сохранение данных
81+
- ввод/вывод данных от пользователя
82+
- валидации / сложные обработки данных
83+
- работа с удаленными ресурсами
84+
85+
<!-- v -->
86+
87+
Асинхронный интерфейс может быть задан:
88+
89+
- callback-функцией
90+
- Promise-интерфейсом
91+
- событиями
92+
93+
<!-- v -->
94+
95+
Для callback функций есть стандартное [error-first соглашение](http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/)
96+
97+
```ts
98+
function asyncOperation(param: any, (error: Error | null, data: any) => {});
99+
```
100+
101+
<!-- v -->
102+
103+
Для Promise:
104+
105+
```ts
106+
function readData(key) {
107+
return Promise.resolve(localstorage.getItem(key));
108+
}
109+
110+
async function readData(key) {
111+
return localstorage.getItem(key);
112+
}
113+
```
114+
115+
<!-- v -->
116+
117+
Документирование API:
118+
119+
- `.d.ts` файлы
120+
- [tsdoc](https://github.com/microsoft/tsdoc)
121+
- тесты
122+
123+
<!-- v -->
124+
125+
Вопросы?

0 commit comments

Comments
 (0)