Какие есть типы в TS, помимо типов JS

Ответ

TypeScript расширяет JavaScript, добавляя дополнительные типы:

  1. Union Types - объединение типов через |:
let id: string | number;
  1. Intersection Types - пересечение типов через &:
type Admin = Person & { permissions: string[] };
  1. Tuple - фиксированный массив с определенными типами элементов:
let coordinates: [number, number];
  1. Enum - перечисление именованных констант:
enum Direction { Up, Down, Left, Right }
  1. Literal Types - конкретные значения как тип:
let status: 'active' | 'inactive';
  1. Any/Unknown - any отключает проверку типов, unknown требует явного приведения.

  2. Never - тип для функций, которые никогда не завершаются.

  3. Void - отсутствие возвращаемого значения.

  4. Type Aliases - псевдонимы для типов:

type Point = { x: number, y: number };

Ответ 18+ 🔞

А, TypeScript, говоришь? Ну это ж тот самый JavaScript, который на стероидах, блядь. Накинули сверху систему типов, чтобы твоя кривая архитектура не развалилась при первом же чихе. Слушай, какие приколы там есть, я тебе сейчас разложу по полочкам, а то ты, как обычно, нихуя не понял.

Union Types — это когда ты такой: «Ой, а вдруг тут будет строка, а вдруг число?» И TypeScript тебе разрешает, сука, оба варианта. Ставишь вертикальную палочку | и спишь спокойно. let id: string | number; — и похуй, хоть цифру пиши, хоть буквы.

Intersection Types — а это когда ты скрещиваешь ужа с ежом, блядь. Берёшь один тип, берёшь другой, через амперсанд & их склеиваешь и получаешь мутанта, у которого все свойства от обоих родителей. type Admin = Person & { permissions: string[] }; — получи, блядь, человека, который ещё и права админа имеет. Хитро, да?

Tuple — это, сука, не просто массив. Это массив, где на каждом месте сидит свой тип и никуда не дёргается. let coordinates: [number, number]; — первое число, второе число, и всё, пиши пропало. Попробуй туда строку сунуть — получишь по ебалу от компилятора.

Enum — перечисление, ёпта. Для тех, кто не хочет помнить, что 1 — это вверх, а 2 — это вниз. Объявляешь enum Direction { Up, Down, Left, Right } и потом пишешь Direction.Up. Красиво, читаемо, и в жопу магические числа.

Literal Types — это вообще пиздец какой контроль. Ты можешь сказать: «Переменная, сука, будет иметь только значение 'active' или 'inactive', и ни хуя больше!» let status: 'active' | 'inactive'; Попробуй присвоить 'pending' — получишь такую ошибку, что мало не покажется. TypeScript тебя за руку ловит, как ребёнка.

Any/Unknown — вот тут начинается веселье. any — это белый флаг, капитуляция. «Я, блядь, сдаюсь, делай что хочешь, проверку типов отключаю». А unknown — это типа «я не знаю, что это, но ты, дружок, прежде чем использовать, докажи мне, что ты знаешь». Более безопасная хуйня, короче.

Never — тип для функций, которые, блядь, никогда не заканчиваются. Либо вечный цикл, либо выброс исключения, которое не ловят. function crash(): never { throw new Error('Пиздец'); } — вот типичный пример.

Void — когда функция делает что-то, но нихуя не возвращает. function logShit(msg: string): void { console.log(msg); } — всё, приехали.

Type Aliases — псевдонимы, блядь. Чтобы не писать каждый раз { x: number, y: number }, ты говоришь: type Point = { x: number, y: number }; И потом юзаешь Point как будто так и надо. Для ленивых, но умных.

Вот и весь базовый набор, чтобы не сесть в лужу. Дальше уже интерфейсы, дженерики и прочая ебля, от которой голова квадратная становится. Но это уже другая история, на сегодня и этого овердохуища.