[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, когда позиция и длина фиксированы и имеют смысловое значение.