Перейти к основному содержимому

[Easy] Базовые типы и аннотации типов

1. Какие базовые типы есть в TypeScript?​

Какие базовые типы предоставляет TypeScript?

TypeScript добавляет систему статической типизации поверх JavaScript. Вы можете аннотировать переменные, параметры функций и возвращаемые значения для обнаружения ошибок до времени выполнения.

Общие примитивные типы (Common Primitive Types)​

let age: number = 30;
let price: number = 99.99;

let userName: string = 'John';
let message: string = `Hello, ${userName}`;

let isActive: boolean = true;

null и undefined​

let emptyValue: null = null;
let notAssigned: undefined = undefined;

С включённым strictNullChecks значения null и undefined не могут быть присвоены каждому типу.

2. Что такое типы object, array и tuple?​

Тип object​

type User = {
id: number;
name: string;
email?: string;
};

const user: User = {
id: 1,
name: 'Pitt',
};

Тип array​

const scores: number[] = [80, 90, 100];
const tags: Array<string> = ['ts', 'react'];

Тип tuple​

Tuple имеет фиксированную длину и фиксированные позиции.

const point: [number, number] = [10, 20];
const userRecord: [number, string, boolean] = [1, 'Alice', true];

3. Что такое union и literal типы?​

Union тип​

let id: string | number = 'A001';
id = 1001;

Literal тип​

type Status = 'idle' | 'loading' | 'success' | 'error';

let requestStatus: Status = 'idle';
requestStatus = 'success';

Union и literal типы полезны для моделирования конечных состояний.

4. Что такое any, unknown, void и never?​

any​

any отключает безопасность типов. Используйте только как временный выход.

let data: any = 10;
data = 'text';
data = { ok: true };

unknown​

unknown безопаснее, чем any. Вы должны сузить тип перед использованием.

function printLength(value: unknown): void {
if (typeof value === 'string') {
console.log(value.length);
}
}

void​

void обычно означает, что функция не возвращает значение.

function logMessage(message: string): void {
console.log(message);
}

never​

never означает, что значение никогда не может возникнуть.

function fail(message: string): never {
throw new Error(message);
}

5. Как работают аннотации типов функций?​

function add(a: number, b: number): number {
return a + b;
}

const multiply = (a: number, b: number): number => a * b;

Необязательные и параметры по умолчанию​

function greet(name: string, title?: string): string {
return title ? `${title} ${name}` : name;
}

function formatPrice(price: number, currency: string = 'USD'): string {
return `${currency} ${price.toFixed(2)}`;
}

6. Что такое вывод типов (Type Inference)?​

TypeScript может выводить типы из значений.

let count = 0; // выведен как number
const framework = 'React'; // выведен как строковый литерал 'React'

Вам не нужно добавлять аннотации везде. Добавляйте явные аннотации там, где API или границы должны быть чёткими.

7. Распространённые ошибки и лучшие практики​

Распространённые ошибки​

  • Чрезмерное использование any
  • Забывание включить strict режим
  • Использование широких типов там, где литеральные union лучше

Лучшие практики​

  • Включите strict режим в tsconfig.json
  • Предпочитайте unknown вместо any
  • Используйте union/literal типы для моделирования состояний
  • Делайте сигнатуры публичных функций явными

8. Краткие ответы для собеседования (Quick Interview Answers)​

В1: Зачем использовать базовые типы TypeScript?​

Для обнаружения несоответствий типов во время компиляции и улучшения инструментов IDE.

В2: any vs unknown?​

any отключает проверку. unknown заставляет сузить тип перед использованием.

В3: Когда использовать tuple вместо array?​

Используйте tuple, когда позиция и длина фиксированы и имеют смысловое значение.