TypeScript не перетворює слабку інженерію на сильну інженерію.
Суворі типи допомагають, але будь-які погані межі та неперевірені правила домену все одно використовуються — майстерність переважає над синтаксисом.
Безпека типів — це не те саме, що якість програмного забезпечення
TypeScript запобігає виникненню важливої категорії помилок. Однак він не запобігає слабкому проектуванню, нечітким моделям домену чи недбалій поведінці під час виконання.
function transferMoney(
from: Account,
to: Account,
amount: number
) {
from.balance -= amount;
to.balance += amount;
}
const user: any = fetchUser();
user.address.street.foo.bar();
interface User {}
interface UserResponse {}interface UserData {}interface UserDTO {}interface UserPayload {}interface UserState {}
TypeScript не розуміє бізнес-логіки
Компілятори не можуть визначити, чи є правилом нарахування знижок справедливим. Типи відстежують форму даних; люди все одно повинні писати тести та гарантувати інваріанти.
Найнебезпечнішим типом є any
any усуває користь від використання компілятора. Краще використовувати unknown у поєднанні з механізмами звуження типу чи точні союзи типів.
Сильні типи не можуть врятувати слабку архітектуру
Структурування на шари, визначення меж та інтерфейси модулів мають більше значення, ніж просте оформлення складної структури за допомогою інтерфейсів.
Типи описують реальність
Моделі мають відповідати домену. Типи, які стверджують наявність значення там, де API повертає null, створюють хибну впевненість.
Погані звички швидше поширюються в TypeScript
Копіювання DTO, надмірно складні „бог-типи“ та безконтрольне використання тверджень швидко поширюються під виглядом „типованого“ коду.
Найкращі розробники TypeScript вже були обережними розробниками JavaScript
Дисципліна передує синтаксису. TypeScript посилює як хороші, так і погані звички.
Використовуйте компілятор як партнера
Увімкніть суворість, усуньте кореневі причини та дозвольте помилкам керувати процесом оптимізації, а не приглушувати їх.
Справжнє оновлення — це не TypeScript
Оновлення полягає у більш зрозумілих модулях, перевірених правилах домену та чесних типах. TypeScript — це інструмент для цієї роботи, а не заміна їй.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks перед обговоренням посібників зі стилю; ці два параметри виявляють більше справжніх помилок, ніж правила найменування.
Поєднуйте DTO у межах кордонів із маперами — не дозволяйте формам зберігання даних потрапляти до компонентів користувацького інтерфейсу лише через те, що обидві вони „типовані“.
Увімкніть noImplicitAny та strictNullChecks ще до обговорення правил стилю; ці два параметри виявляють більше реальних помилок, ніж конвенції найменування.
Поєднуйте DTO на межах із маперами — не дозволяйте форматам даних для зберігання потрапляти до компонентів користувацького інтерфейсу лише через те, що обидва є „типованими“.