Какие конструкции не нужно использовать в TypeScript?
Антипатерны в TS
В TypeScript есть конструкции, которые отключают проверки или вводят в заблуждение — их стоит избегать.
Что не использовать без крайней необходимости
- `any` — выключает проверку типов. Вместо него —
unknownи сужение. - `as` для «убеждения» компилятора —
data as Userничего не проверяет в рантайме. Лучше валидировать данные (zod, type guard). - Non-null `!` —
user!.nameобещает, что значения нетnull, без проверки. - `@ts-ignore` — молча прячет ошибку. Если без подавления не обойтись —
@ts-expect-errorс комментарием. - `Function` и `Object` как типы — слишком широкие; описывайте сигнатуру.
- Пустые интерфейсы и `{}` —
{}значит «любое не-null значение», а не «пустой объект». - Обычные `enum` там, где хватает union литералов, — enum генерирует код в рантайме.
- `namespace` в новом коде — вместо него ES-модули.
// плохо
const user = JSON.parse(raw) as User;
// лучше
const user = UserSchema.parse(JSON.parse(raw));Коротко для собеседования
Избегают any, слепых as и !, @ts-ignore, широких типов Function/{} и лишних enum/namespace — они отключают проверки или усложняют код.
Подробнее: TypeScript — Do's and Don'ts