TypeScript interface: тип объекта и его свойства
interface в TypeScript описывает форму объекта: обязательные и необязательные поля, методы и свойства только для чтения. Компилятор проверяет соответствие во время разработки, но интерфейс не создаёт runtime-валидацию и не проверяет данные из API автоматически.
Объявить интерфейс и типизировать объект
interface User {
id: number;
name: string;
email?: string;
readonly createdAt: Date;
}
const user: User = {id: 7, name: 'Ира', createdAt: new Date()};Знак ? делает поле необязательным. readonly запрещает обычное переназначение свойства после создания объекта, но не замораживает вложенные объекты во время выполнения.
Добавить метод и расширить интерфейс
interface Identified { id: number }
interface Account extends Identified {
login(): string;
}
const account: Account = {id: 7, login: () => 'ira'};Синтаксис | Значение |
|---|---|
| Поле может отсутствовать |
| Поле нельзя переназначить в обычном TS-коде |
| Новый интерфейс наследует контракт |
| Метод возвращает строку |
Чем interface отличается от type?
Оба описывают типы объектов. type дополнительно удобен для union и пересечений; interface поддерживает расширение и декларативное объединение одноимённых объявлений.
Можно ли сделать все поля необязательными?
Используйте utility type Partial<User>, если частичный объект действительно нужен в этом сценарии. Для обновления API отдельно определите, как трактуются пропущенные поля.