#javascript #interface
#javascript #интерфейс
Вопрос:
У меня есть этот интерфейс, созданный в Angular, чтобы «формировать» объект между интерфейсом и сервером.
export interface RepairNote{
id: number,
nombre?: string,
telefono?: number,
ref?: string
marca?: string,
averia?: string,
fecha?: Date,
estado?: /* here */
}
Я готов иметь «estado» (на английском языке: статус) с другой закрытой группой статуса, которая является «Ожидающей, завершенной и закрытой». Это означает, что estado может иметь только одно из этих 3 значений. На мой взгляд, это работает как логическое значение, но с более чем 2 статусами. Это очень простой вопрос, я знаю, что он относится к основам ООП, но у меня ничего не получилось, и я не знаю, как заставить его работать.
Ответ №1:
Я обычно использую «enum» для подобных вещей:
export enum Status {
Pending = 'Pending',
Complete = 'Complete',
Closed = 'Closed',
}
export interface RepairNote {
// ...
status?: Status;
// ...
}
Здесь вы можете найти больше информации о перечислениях: https://www.typescriptlang.org/docs/handbook/enums.html
Комментарии:
1. Спасибо. Этот способ «заставляет» иметь одно из определений внутри enum? Будет ли ошибка, если для ее значения будет записана другая вещь?
2. Сейчас я нахожусь в серверной части, и это не ts, а js, поэтому я не знаю, какой тип установить для модели. Я ввел type: {}, так как нет «enum». Есть предложения?
3. Если вы будете придерживаться TypeScript как во внешнем интерфейсе, так и в бэкэнде, это предотвратит возможность установки такого значения в коде. Один дополнительный уровень безопасности, который вы могли бы добавить в серверную часть, — это запускать все модели, полученные от клиента, через средство проверки схемы JSON, например, этот: ajv.js.org