В TypeScript интерфейсы — мощный инструмент для определения формы объектов. Они позволяют нам указывать обязательные и необязательные свойства объекта. Необязательные свойства — это те, которые могут присутствовать или отсутствовать в объекте. В этой статье блога мы погрузимся в мир необязательных свойств в интерфейсах TypeScript, изучим различные методы их определения и попутно предоставим примеры кода.
Определение дополнительных свойств:
-
Синтаксис вопросительного знака.
Один из способов определить дополнительные свойства в интерфейсах TypeScript — использовать синтаксис вопросительного знака. Ставя вопросительный знак после имени свойства, мы указываем, что свойство является необязательным. Например:interface Person { name: string; age?: number; }В этом примере свойство
ageявляется необязательным, а свойствоnameявляется обязательным. -
Типы объединения с
undefined:
Другой подход к определению необязательных свойств — использование типов объединения сundefined. Присвоивundefinedв качестве возможного значения свойства, мы указываем, что оно не является обязательным. Например:interface Game { title: string; rating: number | undefined; }Здесь свойство
ratingможет быть числом илиundefined, что делает его необязательным.
Использование дополнительных свойств:
-
Проверка существования свойства.
При работе с объектами, имеющими необязательные свойства, важно проверить, существует ли свойство, прежде чем обращаться к его значению. Для выполнения этой проверки мы можем использовать операторinили методhasOwnProperty(). Например:function printRating(game: Game): void { if ('rating' in game) { console.log(`Rating: ${game.rating}`); } else { console.log('No rating available'); } } -
Значения по умолчанию и нулевой оператор объединения.
Мы можем предоставить значения по умолчанию для необязательных свойств с помощью нулевого оператора объединения (??). Если необязательное свойство имеет значениеundefinedилиnull, будет использоваться значение по умолчанию. Например:interface Config { timeout?: number; } function fetchData(config: Config): void { const timeout = config.timeout ?? 5000; // Use the timeout value... }