Я пытаюсь использовать 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?