Ответ
TypeScript предоставляет множество встроенных типов. Основные:
- Примитивы:
string,number,boolean - Специальные:
null,undefined,void,never - Массивы:
number[]илиArray<number> - Кортежи:
[string, number]- фиксированный массив с разными типами - Объекты:
{ name: string; age: number } - Перечисления:
enum Color { Red, Green } - Any/Unknown:
any(отключает проверку),unknown(типобезопасная альтернатива) - Типы объединений:
string | number
Пример:
let user: { name: string; age?: number } = { name: 'Alex' };
function greet(name: string): void { console.log(`Hello ${name}`); }
type ID = string | number; Ответ 18+ 🔞
А, TypeScript, ёпта! Ну, это как если бы твой обычный JavaScript, который и так уже пиздец как хорош, вдруг решил надеть очки, галстук и начать всё по полочкам раскладывать. Типа, "чувак, я тебе помогу, а то ты опять undefined в number запихнёшь и будешь охуевать, почему всё сломалось".
Смотри, какие у него там, блядь, основные типы есть, этот зануда:
- Примитивы — ну, это как три кита, на которых всё держится:
string(буквы всякие),number(циферки, включая дробные, ебать),boolean(ну, правда или ложь,trueилиfalse, хули тут думать). - Специальные типы — это уже интереснее.
nullиundefined— это два брата-близнеца, которые обозначают "ничего", но по-разному, чтобы мозг выебать.void— это когда функция ничего не возвращает, типа "сделал дело — гуляй смело". Аnever— это вообще пиздец, тип для функций, которые никогда-никогда не закончатся (вечный цикл) или всегда выкинут ошибку. - Массивы — куча чего-то одного. Можно записать как
number[](читай "массив чисел"), а можно какArray<number>. Суть одна — хуярь туда цифры, но не пытайся засунуть туда строку, а то получишь втык от компилятора. - Кортежи (Tuples) — это, блядь, как зафиксированный намертво массив.
[string, number]— значит, на первом месте ТОЛЬКО строка, на втором ТОЛЬКО число. Попробуй перепутать — получишь "в рот меня чих-пых" в виде ошибки. - Объекты — тут всё строго: опиши, какие поля должны быть.
{ name: string; age: number }— значит, объект ДОЛЖЕН иметьname(строку) иage(число). Вопрос?послеageделает поле необязательным — можешь не указывать, и тебя за это не прибьют. - Перечисления (Enum) —
enum Color { Red, Green }. Создаёт человекочитаемые константы. Вместо того чтобы писать везде магическое число0или1, пишешьColor.Red. Удобно, но иногда от них больше геморроя, чем пользы, честно. - Any / Unknown — вот это, блядь, интересная парочка.
any— это белый флаг, капитуляция. Говоришь компилятору: "отъебись, я сам знаю, что делаю". Проверка типов отключается. Опасная штука, но иногда нужна.unknown— этоany, но умный. Он говорит: "окей, я не знаю, что тут, но ты прежде чем что-то делать, проверь тип, мудак". - Типы объединений (Union) —
string | number. Классика. Переменная может быть ИЛИ строкой, ИЛИ числом. Очень часто используется, особенно когда работаешь с каким-нибудь ебучим API, который может прислать что угодно.
Ну и примерчик, чтобы закрепить, так сказать:
// Объект с необязательным полем age. Видишь знак вопроса? Можешь его не указывать, и всё будет ок.
let user: { name: string; age?: number } = { name: 'Alex' };
// Функция, которая только делает дело (выводит в консоль) и ничего не возвращает (void).
function greet(name: string): void { console.log(`Hello ${name}`); }
// Создаём свой тип-псевдоним. ID теперь может быть либо строкой, либо числом.
type ID = string | number;
Вот и вся магия, блядь. Сначала кажется, что это лишняя писанина, но потом, когда проект растёт, начинаешь понимать, что эти типы — как надёжные костыли, которые не дают тебе, распиздяю, наступить на грабли и выебать себе всю логику.