JS — Как определить свойство с несколькими статусами для объекта

#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