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 с другими компонентами используйте мапперы — не позволяйте структурам данных, связанным с хранением информации, проникать в компоненты пользовательского интерфейса только потому, что обе стороны имеют типизацию.