Цінності TypeScript-розробника

2026-09-10

TypeScript - моя основна мова, і з роками він перестав бути просто вибором мови й став набором цінностей. Не правилами зі стайлгайду, а звичками, від яких залежить, чи приємно буде змінювати кодову базу через два роки й трьох нових розробників.

Чесність важливіша за зручність. Strict mode увімкнений з першого коміту. any - це баг-репорт, а не тип; коли я справді не знаю форми даних, це unknown, і я його звужую. Тип, який бреше - каст через as, щоб заткнути компілятор, - гірший за відсутність типу, бо всі, хто далі по коду, йому довіряють. Коли компілятор скаржиться, він зазвичай правий, і виправляти треба дані, а не анотацію.

Робіть неможливі стани неможливими. Замість isLoading, isError і data - трьох прапорців, які можуть суперечити один одному, - discriminated union: idle, loading, success з даними, error з причиною. Те саме з доменними станами: оплачене замовлення має paymentId, неоплачене - ні. switch з вичерпною перевіркою через never перетворює «ми забули випадок» з інциденту в продакшені на червону лінію в редакторі.

Довіряй усередині, перевіряй на межах. Типи зникають у рантаймі, тож усе, що перетинає межу - тіло HTTP-запиту, вебхук, форма, localStorage, відповідь LLM, - парситься через Zod чи схожу схему, а тип виводиться з цієї схеми. Одне джерело правди, жодного розриву між тим, що ми валідуємо, і тим, у що віримо. Усередині застосунку типізовані дані йдуть без захисних перевірок на кожному рядку.

Діліться контрактами, а не здогадками. У фулстек-продукті типи API генеруються або спільні - з OpenAPI, GraphQL codegen, Prisma чи спільного пакета, - тож перейменоване поле ламає збірку, а не чекаут. І читабельність важливіша за хитромудрість: простий interface, який новий розробник зрозуміє за десять секунд, вартий більше, ніж п’ятирівневий conditional type, що доводить, що я читав handbook. Generics - для перевикористання, а не для показухи.

Типи не замінюють тести, рев’ю чи мислення - вони роблять усе це дешевшим. У цьому справжня цінність TypeScript-розробника: не знати кожен utility type, а лишати після себе код, який наступна людина може змінювати впевнено. Якщо ваша кодова база повна any, а команда боїться рефакторити, - надішліть модуль, якого ніхто не хоче торкатись. Відповім, як би я його типізував і що це б відловило.

Дайте наступному продукту того, хто лишається.

Готовий стартувати зараз і лишитись. Довготермінові ретейнери, не злив за два тижні. Напишіть - обговоримо проєкт, вимоги і як рухатись далі.

Запитайте про досвід чи послуги