Красота TypeScript + Замыкания в JS 💡
Разбирал пример на курсе и поймал классный инсайт о том, как красиво пересекаются JS-фундамент и система типов TS.
Написали фабричную функцию
В чём тут фишка:
1. Замыкание в JS: Вложенные функции
2. Замыкание в TS: На уровне типов происходит то же самое! Тип
3. const T (TS 5.0): Позволяет не писать
Получился идеальный автокомплит и полная типобезопасность без лишнего кода 🔥
Разбирал пример на курсе и поймал классный инсайт о том, как красиво пересекаются JS-фундамент и система типов TS.
Написали фабричную функцию
customService, которая принимает массив ключей:function customService<const T extends string[]>(keys: T) {
function save<D>(key: T[number], data: D) {
// logic...
}
function getData(key: T[number]) {
// logic...
}
return { save, getData }
}
const serviceUtils = customService(['userId', 'videoId']);
serviceUtils.save('userId', {});
serviceUtils.getData('videoId');
// serviceUtils.getData('postId') // Ошибка TS!
В чём тут фишка:
1. Замыкание в JS: Вложенные функции
save и getData удерживают доступ к области видимости customService даже после её выполнения.2. Замыкание в TS: На уровне типов происходит то же самое! Тип
T запекается при вызове внешней функции (['userId', 'videoId']), а внутренние функции через T[number] "замыкают" этот тип и превращают его в строго ограниченный Union 'userId' | 'videoId'.3. const T (TS 5.0): Позволяет не писать
as const при вызове функции. TS сам выводит массивы как точные readonly-кортежи.Получился идеальный автокомплит и полная типобезопасность без лишнего кода 🔥
Прокачиваю свои CLI-инструменты 🛠
Раньше для отправки кода на GitHub я пользовался обычным дефолтным
Что будет уметь новый скрипт:
⚙️ Интерактивное меню с выбором действий (
⚙️ Быстрый push с вводом кастомного коммита
⚙️ Первичная инициализация репозитория и привязка remote в один клик
⚙️ Быстрое создание и переключение веток.
На скрине сравнение старого скрипта и заготовки для нового. Допилю логику, поправлю пары мелочей и выложу готовый скрипт, если кому-то пригодится! 🔥
Раньше для отправки кода на GitHub я пользовался обычным дефолтным
.bat скриптом из трех команд. Но сегодня решил, что пора избавить себя от рутины, и начал писать полноценную интерактивную утилиту.Что будет уметь новый скрипт:
⚙️ Интерактивное меню с выбором действий (
choice + goto) ⚙️ Быстрый push с вводом кастомного коммита
⚙️ Первичная инициализация репозитория и привязка remote в один клик
⚙️ Быстрое создание и переключение веток.
На скрине сравнение старого скрипта и заготовки для нового. Допилю логику, поправлю пары мелочей и выложу готовый скрипт, если кому-то пригодится! 🔥