Почему я не буду писать свою следующую библиотеку на TypeScript

Валентин Ульянов

Почему я не буду писать
свою следующую библиотеку на TypeScript

Валентин Ульянов

Обо мне

Фото Валентина Ульянова

Обо мне

Фото Валентина Ульянова
Редактор таблиц Р7

Обо мне

Фото Валентина Ульянова
mlut

Atomic CSS toolkit with Sass and ergonomics for creating styles of any complexity

Обо мне

Фото Валентина Ульянова

Я и JavaScript/TypeScript

Я и JavaScript/TypeScript

Я и JavaScript/TypeScript

Я и JavaScript/TypeScript

Содержание

Кадр из Кунг-фу Панды
Дисклеймер о контенте доклада

Системный код - код, который нужен для работы другого кода. Библиотеки, фреймворки, утилиты, etc

Системный код - код, который нужен для работы другого кода. Библиотеки, фреймворки, утилиты, etc

Прикладной код - программа для решения задач предметной области. Сервис доставки, интернет-магазин, онлайн-банк, etc

Акцент на системном коде
Кадр из Кунг-фу Панды
Кадр из Кунг-фу Панды: свиток дракона
Логотип TypeScript

Трезвый взгляд
на TypeScript

Количество скачиваний TypeScript в npm
Количество скачиваний TypeScript в npm Количество звезд на Github у TypeScript
Код с трехэтажным типом на TS
Обложка видео про Doom на типах TS
Скриншот из последнего State of JS

67% of respondents stated they write more TypeScript than JavaScript code – while the single largest group consisted of people who only write TypeScript.

State of JS
Источник

Мастера, которые пишут на JS

На чем написан Fastify

Мастера, которые пишут на JS

На чем написан Svelte

Мастера, которые пишут на JS

На чем пишет Sindre

Мастера, которые пишут на JS

TypeScript - про надежность?

TypeScript - про надежность?

Soundness - свойство системы типов, при котором, скомпилированная программа гарантированно не имеет ошибок, связанных с типами данных

TypeScript - про надежность?

Soundness - свойство системы типов, при котором, скомпилированная программа гарантированно не имеет ошибок, связанных с типами данных

Unsound - антоним soundness

TypeScript - про надежность?

Soundness - свойство системы типов, при котором, скомпилированная программа гарантированно не имеет ошибок, связанных с типами данных

Unsound - антоним soundness

Скриншот из вики TS, что нет цели делать soundness
Вовка в тридевятом царстве
Скриншот из вики TS, что нет цели делать soundness
Заброшенная спека TS
Обложка подкаста с Андреем Старовойтом

TypeScript повышает продуктивность?

Обложка доклада Климова про TypeScript
Но плюсов, то у TS больше!

Главные плюсы TypeScript

Главные плюсы TypeScript

Главные плюсы TypeScript

Главные плюсы TypeScript

TypeScript - не только язык

TypeScript - не только язык

TypeScript - не только язык

Скриншот кода с автокомплитом

TypeScript - не только язык

TypeScript - не только язык

А что если 🤔

Компоненты
  • Language server
  • Definition Types

А что если 🤔

Компоненты
  • Language server
  • Definition Types
Сильные стороны
  • Контракты
  • Статический анализ
  • Функционал IDE
Typescript в Fastify
Typescript в Svelte
Dramatic Chipmunk
Кадр из Кунг-фу Панды: свиток дракона

Причины
не писать
на TypeScript

Бэкенд инфраструктура в AWS
Синяя книга про DDD
Пример value object в коде
Пример value object в коде
Создание сущности из DTO
Translator entity использует базовый класс Entity
Translator entity использует базовый класс Entity
Translator entity использует базовый класс Entity
Translator entity использует базовый класс Entity
Ошибка типизации в Entity
ts-ignore в Entity
Ошибки типизации в Entity
Создание сущности из JSON
JS код fromJson
Неудачная попытка типизации fromJson
Типизированный fromJson
Hide pain Harold
Мем: парень стоит у доски с формулами

Структурная типизация

Совместимость типов определяется по их структуре, а не по имени или месту объявления

Проблемный кейс
Проблемный кейс

Вариантность типов

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

Вариантность типов

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

Возможность использовать надтип или подтип там, где используется исходный тип

Вариантность типов

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

Ковариантность - в прямом порядке

Вариантность типов

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

Ковариантность - в прямом порядке

Контрвариантность - в обратном порядке

Вариантность типов

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

Ковариантность - в прямом порядке

Контрвариантность - в обратном порядке

Вариантность типов

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

Ковариантность - в прямом порядке

Контрвариантность - в обратном порядке

Бивариативность - в обе стороны

Проблемный кейс
Проблемный кейс
Проблемный кейс
Проблемный кейс
Проблемный кейс

Ограничения TS

Ограничения TS

Ограничения TS

Проблемный кейс(ы)
Костыльное решение
Костыльное решение

Баги TS

Количество багов в TypeScript
Смешные баги в TS
Серьезный баг в TS
Серьезный баг в TS
Серьезный баг в TS
Неверная подсказка TS

Еще одна причина

Начало примера деоптимизации
Начало примера деоптимизации
Пример оптимизации компилятором
Пример оптимизации компилятором
Пример оптимизации компилятором
Начало примера деоптимизации
Начало примера деоптимизации
Начало примера деоптимизации
Пример деоптимизации
Пример деоптимизации
Взрыв
Пример деоптимизации

Наличие этапа сборки

Наличие этапа сборки

Наличие этапа сборки

Репозиторий PostCSS

Кейсы мастеров

Кейсы мастеров

PR в Svelte с зменой TS на JSDoc

Кейсы мастеров

PR в Deno с зменой TS на JS
PR в Deno с зменой TS на JS

Кейсы мастеров

PR в Turbo с зменой TS на JS

Резюме

Резюме

Резюме

Резюме

Кадр Скуби Ду: фред снимает маску
Кадр из Кунг-фу Панды: свиток дракона

Что делать?

Открываем tsconfig в Svelte

Language Server

Пример jsconfig
Пример jsconfig

Контракты и аннотации

Контракты и аннотации

Контракты и аннотации

.d.ts

.d.ts

.d.ts

.d.ts

Описание типов отдельно в .d.ts

JSDoc

JSDoc

JSDoc

JSDoc

Мем про возможности jsdoc
Описание типов отдельно в jsdoc
Описание типов отдельно в jsdoc
Описание типов отдельно в jsdoc
Описание типов отдельно в jsdoc

.d.ts + JSDoc

.d.ts + JSDoc

Описание типов отдельно в d.ts с jsdoc
Описание типов отдельно в d.ts с jsdoc
Описание типов отдельно в d.ts с jsdoc

Тайпчекинг

Тайпчекинг

Тайпчекинг

Пример работы сетапа

Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Примеры работы сетапа
Типизированный fromJson
Типизированный fromJson
Типизированный fromJson
Типизированный fromJson
Мем bell curve jsdoc vs ts
Мем: JSDoc в 2025?
Кадр из Кунг-фу Панды: Тай-лунг открывает свиток дракона
Кадр из Кунг-фу Панды: свиток дракона

Что мы получили

Что мы получили

Что мы получили

Что мы получили

Заключение

Альтернативный способ работы с TS

Альтернативный способ работы с TS

Альтернативный способ работы с TS

Хорошо подойдет

Хорошо подойдет

Подойдет хуже

Подойдет хуже

Подойдет хуже

Выводы

Выводы

Выводы

Вопросы?

Валентин Ульянов Презентация: 150.lv/t/ts
Телеграм-канал:
qr-код на телеграм канал