📘 TypeScript
Интерфейсы и псевдонимы типов TypeScript
Определение интерфейса
interface User {
id: number;
name: string;
email: string;
}
const user: User = {
id: 1,
name: "Алиса",
email: "alice@example.com"
};
Необязательные и readonly-свойства
interface Product {
readonly id: number; // нельзя изменить после создания
name: string;
price: number;
description?: string; // необязательное
}
const laptop: Product = {
id: 101,
name: "Ноутбук Pro",
price: 89999
};
// laptop.id = 200; // ❌ Ошибка: readonly
Расширение интерфейсов
interface Animal {
name: string;
age: number;
}
interface Dog extends Animal {
breed: string;
bark(): void;
}
const rex: Dog = {
name: "Рекс",
age: 3,
breed: "Лабрадор",
bark() { console.log("Гав!"); }
};
Интерфейс vs псевдоним типа
// interface — расширяемый, слияние объявлений
interface Point { x: number; y: number; }
interface Point { z?: number; } // объединяются!
// type alias — мощнее, поддерживает объединения
type Shape = Circle | Rectangle;
type Circle = { kind: "circle"; radius: number };
type Rectangle = { kind: "rect"; w: number; h: number };
Индексные сигнатуры
interface StringMap {
[key: string]: string;
}
const config: StringMap = {
host: "localhost",
port: "5432",
db: "myapp"
};