- Каждое ДЗ должно быть в файле в
src
видаsrc/<имя>/<номер урока>.ts
. Либо, несколько файлов, если задача большая - ДЗ должно быть сделано в отдельной ветке, которая называется
lesson-<номер урока>
. Например,lesson-1
- Отправка происходит как Pull-Request в ветку
master
в этом репозитории на Github
Как запускать код на TypeScript
? Если вам не нужна сборка для веба или Node.js
, то можно запускать через ts-node
или bun
. Пример:
npx ts-node src/boris/3.ts
bun src/boris/3.ts
- Установите
Node.js
илиBun JS
, если не установлено - Установки пакетов (1 из 3 команд на выбор) -
npm i
/yarn
/bun i
- Пример скриптов запуска в
package.json
- скриптыstart:example:
. Не для редактирования - для примера! - Не нужно писать свои скрипты запуска в
package.json
, просто запускайте файлы напрямую черезnpx ts-node
илиbun
Код из файлов урока 005*
отрефакторен и перенесен в src/boris/5.tsx
(Action, State, Reducer) и src/boris/6/app.tsx
(React, Context, импорт редьюсеров из файла 005.tsx
).
- Задание - ПЕРЕД ВЫПОЛНЕНИЕМ ДЗ сделать
git pull
и получить новую версию кода - Задание - ознакомиться и вспомнить, что такое редъюсеры, экшены, стейт, и как они должны влиять на интерфейс согласно FLUX. (Т.е. вспомнить прошлый урок, перечитав файлы -
src/boris/5.tsx
,src/boris/6/app.tsx
сейчас там чище) - Задание - Прочитать файл
src/boris/6/server.tsx
, там всего 50 строчек. Установитеbun
и запустите этот файл. Откройте сайт (ссылка будет в консоли) и сопоставьте увиденное с содержимым папкиsrc/boris/6
. Не забудьте открыть консоль браузера, чтобы увидеть лог экшенов. - Задание - в файле
src/boris/6.tsx
вы найдете пример асинхронной функции. На её примере реализуйте другие. Используйтеasync / await
:sleep
- принимает число миллисекунд и возвращает Promise, который резолвится через указанное времяping
- принимает строку и число и возвращает Promise, который резолвится через указанное время с указанной строкой.randomBatchPing
- принимает массив строк. Для каждой строки создаетping
со случайным временем. Каждая строка - результат вызоваping
с рандомным числом и строкой из массива.serializePings
- принимает массив строк и возвращает Promise, который резолвится через указанное время со строкой видаping1 ping2 ping3...
, гдеping1
- результат вызоваping
с рандомным числом и первой строкой из массива и т.д.
- Сделать обертку над существующей функцией
calculateStateDiff
(либо её вариант) из файла./src/boris/4.ts
-calculateObjectDiffRecursive
, , которая ищет различия в объектах, вложенных в объекты. Пример:
const state1 = {
a: 1,
b: {
c: 2,
d: 3,
},
e: 4,
};
const state2 = {
a: 1,
b: {
c: 20,
d: 3,
},
e: {
f: 5,
},
};
calculateObjectDiffRecursive(state1, state2) // -> ["b.c", "e"]
- Написать тесты на новую функцию
calculateStateDiff
- На строке 29 в файле
./src/boris/4.ts
есть ошибка TS. Напишите, почему она там, но различия между строками ищутся
Расширить класс LinkedList
- Ознакомиться с докой по JS итераторам (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator)
- Поддержать интерфейс reducable (пример в
./src/boris/2_2.ts
) - Сделать LinkedList с предохранителем от циклов (и конечно с
[Symbol.iterator]
)