Ответ
TypeScript (TS) — это типизированное надмножество JavaScript. Вот ключевые технологии и фичи, которые я использовал:
- Типы и интерфейсы
interface User {
id: number;
name: string;
}
const user: User = { id: 1, name: 'John' };
- Generics для обобщённых функций/компонентов:
function identity<T>(arg: T): T { return arg; }
- Utility Types (
Partial,Pick,Omit):
type PartialUser = Partial<User>;
- Декораторы (в Angular/NestJS):
@Component({ selector: 'app-root' })
class AppComponent {}
- Опциональные и union-типы:
type Status = 'active' | 'inactive';
- Строгая типизация пропсов/стейта (React/Vue).
Также работал с type guards, enums, mapped types и интеграцией TS в сборку (Webpack/Vite).
Ответ 18+ 🔞
А, TypeScript, говоришь? Ну это ж, блядь, как JavaScript, только в очках и с галстучком! Серьёзный такой, правильный. Я эту хуйню постоянно юзаю, щас тебе на пальцах разжую, как бабушка котлету.
Смотри, главная его фишка — типы и интерфейсы. Это как паспорт для твоих данных. Без паспорта — ты бомж, и компилятор тебя в консоль вышвырнет.
// Вот смотри, объявляем, кто такой пользователь. Чётко, блядь!
interface User {
id: number; // ID — число, а не строка "один", ёпта!
name: string; // Имя — строка, а не массив или хуй с горы
}
// А вот создаём этого пользователя. Попробуй name: 123 впихни — получишь пиздюлей от TS сразу!
const user: User = { id: 1, name: 'John' };
Дальше — Дженерики (Generics). Звучит сложно, а на деле — просто хуйня, которая подстраивается. Как универсальная отвёртка.
// Вот функция-зеркало. Что в неё сунешь — то и получишь назад. T — это тип, который подставится сам.
function identity<T>(arg: T): T { return arg; }
// Сказал ей, что T — string, она и вернёт строку. Не промахнётся.
const result = identity<string>("Привет, ёпта!");
А ещё там есть Utility Types — готовые шаблоны для лентяев. Зачем самому выёбываться, если можно взять Partial?
type PartialUser = Partial<User>; // Теперь все поля в User стали необязательными! Хочешь — name укажи, хочешь — хуй с ним.
Декораторы — это вообще магия, особенно в Angular или NestJS. Вешаешь волшебную @-штуку на класс или метод — и он обрастает новой функциональностью, как ёлка игрушками.
@Component({ selector: 'app-root' }) // Смотри, какая красота! Один декоратор — и класс уже компонент.
class AppComponent {}
Ну и куда же без опциональных и union-типов! Это когда переменная может быть или-или. Не "какой-то хернёй", а строго из списка.
type Status = 'active' | 'inactive' | 'pending'; // Всё, других статусов нет. 'banana' не прокатит, забудь.
let currentStatus: Status = 'active'; // Вот так можно.
// currentStatus = 'ёбнутый'; // А вот так — нет, получишь ошибку, хитрая жопа!
Работал я и со строгой типизацией пропсов в React. Это когда твой компонент не примет левые данные, даже если его очень попросить. И с type guards (это такие проверки, которые TypeScript понимает), и с enum, и со всей этой ебушкой-воробушкой.
И самое главное — вся эта строгость потом собирается в обычный JS через Webpack или Vite. TypeScript — это как чертёж, а на выходе получается готовая избушка, только без курьих ног. В общем, вещь!