Ответ
any— отключает проверку типов, теряя преимущества TS. Используйunknownили конкретные типы.- Неявные
any— включайnoImplicitAnyв tsconfig, чтобы избежать неявного any. as(утверждение типов) — может скрывать ошибки. Лучше использовать сужение типов или guards.enum— могут быть избыточны. Альтернативы: union-типы (type Status = 'active' | 'inactive') или const-объекты.- Неиспользуемые дженерики — если тип не используется, замени на конкретный или удали.
- Опциональные цепочки (
?.) без необходимости — могут маскировать проблемы. Проверяй данные явно.
Пример плохого кода:
function getValue(data: any): string {
return data?.value as string; // ❌ any + as + ?.
}
Лучше:
function getValue(data: { value?: string }): string | undefined {
return data.value; // ✅ явная типизация
} Ответ 18+ 🔞
А, слушай, смотри-ка, какие тут типичные грабли в TypeScript поджидают, прямо как собака Муму под крыльцом, блядь. Народ на них наступает, а потом орет, что TS — говно. А это ты, дружок, просто еблан.
Вот, например, any. Это же просто белый флаг, капитуляция, блядь. Написал any — и всё, можно хоть хуй в пальто передавать, компилятор проглотит. Зачем тогда TS, если ты им как Герасим — немой? Вместо этого есть unknown или, на хуй, нормальные типы напиши.
Дальше — неявные any. Это когда ты такой: "ой, компилятор, сам догадайся, че я тут хочу". Включи в tsconfig опцию noImplicitAny, и он тебе сразу: "Э, сабака, сука, э бошка думай!". Заставит объявлять типы явно.
А вот это as — утверждение типов. Ну прям как Герасим с Муму: "Я сказал — это строка, значит строка, блядь, хоть ты тресни!". Можешь так ошибиться, что потом полдня искать, где ж тебя заложили. Лучше сужение типов через typeof, instanceof или type guards.
enum — о, ёпта, отдельная песня. Часто они как мартышлюшка — суетливые и не всегда нужные. Для простых наборов значений хватит union-типа: type Status = 'active' | 'inactive'. Или const-объекта. Проще, понятнее, и в рантайме не выебываются.
Неиспользуемые дженерики — это вообще пиздец. Объявил <T>, а T нихуя не делаешь. Зачем? Просто для красоты? Удали или замени на конкретный тип, не мусорь.
И последнее — опциональные цепочки (?.). Инструмент-то хороший, но им как дубинкой: можно и по голове себе дать. Ставишь везде, где ни попадя, маскируешь реальные проблемы с данными, а потом в продакшене — удивление пиздец, откуда undefined вылез. Проверяй данные явно, когда это важно.
Смотри, вот тебе пример, как делать не надо, прям как в той сказке — всё через жопу:
function getValue(data: any): string {
return data?.value as string; // ❌ Три греха разом: any, ?., as. Пизда рулю.
}
А вот как надо, по-человечьи:
function getValue(data: { value?: string }): string | undefined {
return data.value; // ✅ Всё честно, тип ясен, варианты понятны.
}
Вот и вся философия. Не будь мудаком, как тот барин, который велел Муму утопить. Думай, что пишешь, и TS ответит тебе взаимностью, а не ошибками в 3 часа ночи.