← Назад к вопросам
Что такое статическая типизация?
1.2 Junior🔥 161 комментариев
#JavaScript Core#TypeScript
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Статическая типизация
Статическая типизация — это система, при которой типы переменных, функций и выражений проверяются и определяются на этапе компиляции или разработки, до запуска кода. Это в отличие от динамической типизации, где типы определяются во время выполнения (runtime).
Динамическая vs Статическая типизация
// JavaScript — динамическая типизация
let value = 42; // число
value = 'строка'; // строка (переприсвоение работает)
value = true; // булево (переприсвоение работает)
// TypeScript — статическая типизация
let value: number = 42;
value = 'строка'; // Ошибка компиляции — тип не совпадает
value = true; // Ошибка компиляции — тип не совпадает
value = 100; // OK — число
Основные преимущества статической типизации
1. Ранее обнаружение ошибок
// Динамическая типизация — ошибка во время выполнения
function add(a, b) {
return a + b;
}
add('10', 20); // '1020' (конкатенация вместо сложения!) — баг в runtime
// Статическая типизация — ошибка во время разработки
function add(a: number, b: number): number {
return a + b;
}
add('10', 20); // Ошибка TypeScript: Argument of type 'string' is not assignable to parameter of type 'number'
2. Лучшая поддержка IDE
interface User {
name: string;
email: string;
age: number;
}
const user: User = { name: 'John', email: 'john@example.com', age: 30 };
user. // IDE подсказывает: name, email, age (autocompletion)
user.phon // Ошибка — неправильное поле
3. Самодокументируемый код
// Сразу видно, какие типы ожидаются и что возвращает функция
function getUserById(id: number): Promise<User> {
return fetch(`/api/users/${id}`).then(r => r.json());
}
// Без типов — нужно гадать
function getUserById(id) {
return fetch(`/api/users/${id}`).then(r => r.json());
}
4. Рефакторинг с уверенностью
interface Product {
id: number;
title: string;
price: number;
}
// Если изменить структуру Product, TypeScript найдёт все места, где это используется
const product: Product = { id: 1, title: 'Ноутбук', price: 1000 };
product.nme; // Ошибка типов
TypeScript — статическая типизация для JavaScript
// Примитивные типы
const age: number = 30;
const name: string = 'Иван';
const isActive: boolean = true;
const data: null = null;
const unknown_value: undefined = undefined;
// Объекты
interface Person {
name: string;
age: number;
email?: string; // опциональное поле
}
const person: Person = {
name: 'Мария',
age: 25
};
// Функции
function greet(person: Person): string {
return `Привет, ${person.name}`;
}
// Массивы
const numbers: number[] = [1, 2, 3];
const names: Array<string> = ['Иван', 'Мария'];
const mixed: (string | number)[] = [1, 'два', 3];
Продвинутые типы в TypeScript
// Union типы
type Status = 'pending' | 'success' | 'error';
const status: Status = 'success';
// status = 'invalid'; // Ошибка
// Generics (обобщённые типы)
function getFirstElement<T>(arr: T[]): T {
return arr[0];
}
const firstNum = getFirstElement([1, 2, 3]); // T = number
const firstStr = getFirstElement(['a', 'b']); // T = string
// Readonly
interface ReadonlyUser {
readonly id: number;
readonly name: string;
}
// Utility типы
type Partial<T> = { [K in keyof T]?: T[K] };
type Required<T> = { [K in keyof T]-?: T[K] };
type Pick<T, K> = { [P in K]: T[P] };
type Record<K, T> = { [P in K]: T };
Где используется статическая типизация
// TypeScript
const value: string = 'hello';
// Python с type hints
def add(a: int, b: int) -> int:
return a + b
// Java (статическая типизация по умолчанию)
public static int add(int a, int b) {
return a + b;
}
// C++ (статическая типизация)
int add(int a, int b) {
return a + b;
}
Недостатки статической типизации
// 1. Больше кода
function add(a: number, b: number): number { // много типов
return a + b;
}
// vs JavaScript
function add(a, b) { // компактнее
return a + b;
}
// 2. Кривая обучения
// Нужно понимать: interfaces, generics, union types, etc.
// 3. Время компиляции
// TypeScript нужно компилировать в JavaScript
Когда использовать
- Большие проекты (>10k строк кода)
- Командная разработка (типы как документация)
- Критичные приложения (финансы, медицина)
- Долгосрочные проекты (рефакторинг безопаснее)
Когда не нужна
- Маленькие скрипты и прототипы
- Быстрая разработка (MVPs)
- Одиночная разработка с простым кодом
Вывод
Статическая типизация помогает писать безопаснее, надёжнее и проще поддерживать код. TypeScript в JavaScript экосистеме стал стандартом де-факто для серьезных проектов благодаря раннему обнаружению ошибок и лучшей поддержке IDE.