Создание именованного параметра для базового класса в typescript и javascript

#javascript #typescript

Вопрос:

Я создал класс базовой модели с моделью для входящих данных, я буду моделировать данные внутри класса по некоторым внешним причинам. Хотя я столкнулся с проблемой, связанной с определением входящих данных в этот класс модели.

Это мой класс

 export class EntityBasic {  constructor(  public id: string,  public title: string,  public urn?: string,  public risk_level?: string,  public be_aware?: string,  public body?: string,  public published_at?: string,  public created_at?: string,  public updated_at?: string,  public description?: string,  public notes?: string,  ) {}} }  

Как я определяю содержимое внутри него на другой странице:

 public getEntity(setEntity) {  return new EntityBasic(  setEntity.id,  setEntity.title,  setEntity?.urn,  setEntity?.risk_level,  setEntity?.be_aware,  setEntity?.body,  setEntity?.published_at,  setEntity?.created_at,  setEntity?.updated_at,  setEntity?.report?.summary || '',  setEntity?.report?.metadata?.source_notes,  setEntity?.report?.metadata?.notes,  );  }  

Но определение данных таким образом создало мне проблемы, так как иногда, например, не будет урны или уровня риска, и данные будут перепутаны внутри класса.
Я хотел бы, чтобы способ определения был таким (это не сработало):

 public getEntity(setEntity) {  return new EntityBasic(  id = setEntity.id,  title = setEntity.title,  urn = setEntity?.urn,  risk_level = setEntity?.risk_level,  ) }  

Комментарии:

1. Не можете ли вы определить значение по умолчанию для каждого поля? Или сохраните их null и перезапишите это значение в случае, если есть значение из входящих данных. Таким образом, каждое поле по крайней мере определено.

Ответ №1:

Я считаю, что объединение всех параметров в один объект-лучшее решение.

  1. Оберните их как интерфейс
 interface EntityBasicParameters {  id: string;  title: string;  urn?: string;  risk_level?: string;  be_aware?: string;  body?: string;  published_at?: string;  created_at?: string;  updated_at?: string;  description?: string;  notes?: string; }  
  1. Примите только этот объект в качестве параметра конструктора
 export class EntityBasic {  constructor(params: EntityBasicParameters) {}} }  
  1. Теперь вы можете передавать только существующие данные
 public getEntity(setEntity) {  return new EntityBasic({  id: setEntity.id,  title: setEntity.title,  urn: setEntity?.urn,  risk_level: setEntity?.risk_level,  }) }  

или просто

 public getEntity(setEntity) {  return new EntityBasic(setEntity) }