Возможно ли записывать не обязательные поля в type в TypeScript?
Типы и интерфейсы
Да. Необязательное поле в type (как и в interface) помечают знаком `?`.
type User = {
id: string;
name: string;
email?: string; // необязательное
};
const a: User = { id: '1', name: 'Анна' }; // ок
const b: User = { id: '2', name: 'Иван', email: 'i@m.ru' }; // окТип необязательного поля
При чтении user.email имеет тип string | undefined — перед использованием нужна проверка:
const domain = user.email?.split('@')[1];Связанные приёмы
Partial<User>— сделать необязательными все поля.Required<User>— наоборот, все обязательными.Pick+Partial— необязательными только некоторые поля.- С флагом
exactOptionalPropertyTypesполе с?нельзя явно присвоитьundefined— только пропустить.
Отличие от email: string | undefined
Поле с | undefined обязательно присутствует в объекте (пусть и со значением undefined), а email? можно не указывать вовсе.
Коротко для собеседования
Да, через ? после имени поля; при чтении тип включает undefined, а Partial/Required меняют обязательность всех полей сразу.
Подробнее: TypeScript Handbook — Optional Properties