Nest JS Swagger - Определение дополнительных свойств пользовательского класса, не работающего с декоратором ApiExtraModels - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь использовать swagger в своем приложении Nest JS, и я не могу определить пользовательский класс, который будет использоваться для ввода дополнительных свойств.

У меня есть пользовательский класс:

@ApiExtraModels(Entity) 
export class Entity {  
     @ApiProperty({description:"Map of the entities"}) entityID: string; 
}

После этого я проверил, что путь к схеме (который должен быть определен с помощью декоратора ApiExtraModels) определен - журнал консоли ...

console.log("getSchemaPath", getSchemaPath('Entity'));

... действительно имеет вывод из:

getSchemaPath #/components/schemas/Entity

После этого кода я попытался использовать эту схему в качестве типа для дополнительных свойств как таковых:

export class EntityLevel {
  @ApiProperty({description:"Generic name of the entities in the current level"})
  levelName: string;

  @ApiProperty({
    description:"Map object of the Entities - [GUID: string]: Entity",
    type: 'object',
    additionalProperties: {$ref: getSchemaPath('Entity')}
  })
  levelEntities: Map<string, Entity>;
}

Но вывод на сваггер для данного объекта :

{
   "levelName": "string",
   "levelEntities": {}
} 

Мой текущий обходной путь - удалить декоратор @ApiExtraModels и добавить фиктивное свойство типа Entity в другой класс, а затем оно работает как надо (с фиктивным свойством, которое я не хочу иметь конечно):

export class RandomClass {
  id: String;

  @ApiPropertyOptional({
    description: "This is a dummy entity added as a workaround for not being able to include Entity type otherwise",
    type: Entity
  })
  dummyEntity?: Entity;
}

Тогда чванство для объекта будет таким:

{
  "levelName": "string",
  "levelEntities": {
    "additionalProp1": {
      "entityID": "string"
    },
    "additionalProp2": {
      "entityID": "string"
    },
    "additionalProp3": {
      "entityID": "string"
    }
  }
}

Что я делаю не так, когда пытаюсь определить ExtraModel с помощью декоратора @ApiExtraModels?

...