Пропозиції TC39 у 2026 році: пояснення концепцій Decorators, Temporal та Signals
Практичний огляд трьох пропозицій TC39 — нативних декораторів, Temporal API та Signals — та їхнього значення для розробників JavaScript та TypeScript з повноцінним стеком.
З кінця 1990-х років скептики приблизно раз на рік оголошували, що JavaScript „завершено“, але щоразу ця мова доводила їхню неправоту. Комітет TC39, який керує розвитком ECMAScript, тихо просуває через свої етапи пропозиції, які змінюють спосіб написання повсякденного коду.
Якщо ви розробляєте за допомогою JavaScript, React чи Next.js, кілька пропозицій, які зараз знаходяться на розгляді, заслуговують на увагу. Жодна з них не є яскравими фічами — це такі зміни, які просто тихо усувають шаблонний код, який ви писали роками, навіть не ставлячи цього під сумнів.
Ось три пропозиції, яким варто приділити увагу.
1. Нативні декоратори майже готові
Розробники TypeScript роками користувалися декораторами за допомогою флага компілятора experimentalDecorators. Цей тимчасовий рішення поступово виходить з ужитку. Стандартизована пропозиція щодо декораторів досягла 3-го етапу, що означає, що браузери та середовища виконання JavaScript вже розробляють їхні справжні реалізації.
// before: relying on experimentalDecorators + reflect-metadata
class UserService {
@logCall
fetchUser(id: string) {
return api.get(`/users/${id}`);
}
}
Оновлена специфікація відмовляється від старого підходу, заснованого на reflect-metadata, на користь чогось більш передбачуваного: функція декоратора тепер отримує значення, яке вона декорує, разом із об’єктом контексту, що його описує, і може повернути замінник цього значення. Якщо ви коли-небудь стикалися з неузгодженими версіями реалізації декораторів у Babel та в самому TypeScript, це зближення є справді хорошою новиною.
Коротко кажучи: якщо ваш вибраний фреймворк — ін’єкція залежностей у стилі Angular, MobX чи патерни, схожі на NestJS — базується на декораторах, можна очікувати менше проблем із флагами компілятора у майбутніх версіях.
2. Temporal майже готовий до випуску
Вбудований об’єкт Date у JavaScript вже майже три десятиліття є джерелом розчарувань. Він не має властивості незмінності, обробляє часові зони способом, який викликає плутанину, та містить методи зміни стану, які створюють труднощі навіть у досвідчених інженерів. Temporal — це пропозиція, яка отримувала довгострокову підтримку від співробітників Mozilla та інших зацікавлених сторін, — тепер досягла завершальної стадії та, як очікується, буде включена до майбутньої версії ECMAScript.
const meeting = Temporal.ZonedDateTime.from(
"2026-09-14T10:00:00[America/New_York]"
);
const inTokyo = meeting.withTimeZone("Asia/Tokyo");
За допомогою Temporal ви отримуєте правильні часові дані з урахуванням часових поясів без необхідності використання бібліотек на кшталт moment.js, а такі операції, як зміна часу зустрічі на інший часовий пояс, стають простими, замість того щоб вимагати ручних обчислень зсувів. Якщо ви розробляєте функції планування всередині додатку Next.js, це, мабуть, найбільше покращення якості роботи з мовою програмування.
3. Сигнали: стандарт для реактивного стану
useState у React, ref у Vue та сигнали у Solid — це різні способи вирішення однієї й тієї самої основної проблеми: відстеження значень, які змінюються з часом, та реагування на ці зміни. Пропозиція TC39 щодо сигналів має на мету надати JavaScript вбудовану реактивну примітивну структуру, на якій можуть будуватися фреймворки, замість того щоб кожна екосистема винаходила свою версію цього механізму.
Ця пропозиція знаходиться на ранній стадії розробки, але напрямок, який вона вказує — жартома кажучи — є чітким: менше дубльованої логіки реактивності в Redux, React та інших бібліотеках керування станом, та більше спільних, повторно використовуваних елементів будівництва під ними.
Що це означає для вашого стеку
- Першими прийдуть переваги TypeScript. Чистіші, стандартизовані визначення типів як для декораторів, так і для Temporal потраплять у інструменти, які ви вже використовуєте.
- Ваш шар користувацького інтерфейсу та налаштування стилізації, включаючи такі інструменти, як Tailwind CSS, не зазнають прямого впливу, але швидше та надійніше оброблення дат/часу означає менше власного коду-функцій, який забруднює ваші компоненти.
- Навіть до того, як бібліотеки на клієнтській стороні повністю приймуть Temporal, серверські компоненти Next.js, ймовірно, стануть одним із перших місць його використання, особливо для форматування дат на серверній стороні.
Співголова TC39 Роб Палмер у оновленнях комітету зазначив, що тепер стало звичайним, коли кілька пропозицій проходять до наступного етапу в межах одного циклу засідань. Ця тенденція свідчить про те, що темпи розвитку мови справді прискорилися за останні кілька років.
Остаточні міркування
Усе це не змінює код на JavaScript, який ви використовуєте сьогодні. Але наступного разу, коли ви інстинктивно звернетеся до moment.js чи будете боротися з поліфілом для декораторів, пам’ятайте, що нативне рішення вже проймає всі необхідні етапи розробки. Те, що досвідчені розробники тримаються на крок-два попереду, допомагає їм уникнути складних ситуацій — і саме тому багато з них виступають проти впровадження патернів, які можуть створити технічний борг ще до остаточного узгодження пропозицій.