конструкция using в грядущем typescript 5.2

В грядущем typescript 5.2 собираются добавить очень интересную и полезную фичу using. Подобное уже реализовано в других языках: В C# это using, в Go - defer. В чем основная идея. using позволяет автоматически освобождать ресурс (вызывать специальный метод для этого) после того, как покидает область видимости блока. Например у нас есть метод getResource у которого реализован метод [Symbol.dispose](). Тогда мы можем написать следующий код и метод Symbol.dispose будет выполнен автоматически в конце выполнения функции main, как если бы эта конструкций была бы завернута в блок try finally....

июня 27, 2023 · 1 минута · 184 слова · lexich

Создание параметризированных строк

Задача, которая встречается почти в каждом проекте - это создание параметризированных строк. Чаще всего подобные конструкции можно встретить роутерах, но применение можно найти во многих других местах. Обычно это выглядит примерно так: const postURL = template('{host}/posts/{id}'); const url = postURL({ host: 'http://example.com', id: 1 }); // url === 'http://example.com/posts/id' Реализовать подобное API не представляет большой сложности. Разбиваем строку с помощью регулярного выражения, подставляя реальные значения вместо переменных. // создаем regexp для разбиения const buildSeparatorVarRx = (start: string, end: string) => new RegExp(`${start}([^${start + end}]+)${end}`); // в качестве разделителя используем скобки const rx = buildSeparatorVarRx('\\{', '\\}'); export function template<T extends string>(tmpl: T) { const array = tmpl....

июня 4, 2023 · 4 минуты · 715 слов · lexich

Брендированные типы в typescript

Cегодня хочется поговорить о брендированных типах в typescript. Для начала, представим, что у нас есть функция для конвертации валют. const usdToEur = (usdAmount: number, rate = 0.92) => usdAmount * rate; usdToEur(100); // === 92 eur Давайте немного улучшим ее, введя типы USD и EUR, чтобы не только название функции и коментарии к ней подсказывали нам о ее предназначении. type USD = number; type EUR = number; const usdToEur = (usdAmount: USD, rate = 0....

мая 15, 2023 · 2 минуты · 225 слов · lexich