Typescript 如何向筛选器动态添加新属性?

Typescript 如何向筛选器动态添加新属性?,typescript,loopbackjs,loopback4,Typescript,Loopbackjs,Loopback4,我有一个观察者,正在尝试向所有控制器动态添加一个名为“pivot”的新属性到param筛选器中,这可能吗 @lifeCycleObserver('controller-overrider') export class PivotModelsObserver implements LifeCycleObserver { constructor( @inject.tag(RepositoryTags.REPOSITORY) public repositories: CrudRep

我有一个观察者,正在尝试向所有控制器动态添加一个名为“pivot”的新属性到param筛选器中,这可能吗

@lifeCycleObserver('controller-overrider')
export class PivotModelsObserver implements LifeCycleObserver {
  constructor(
    @inject.tag(RepositoryTags.REPOSITORY)
    public repositories: CrudRepository[],
    @inject.tag(CoreTags.CONTROLLER)
    public controllers: ControllerClass[],
    @inject(CoreBindings.APPLICATION_INSTANCE)
    public app: CoreApplication,
  ) {}

  /**
   * This method will be invoked when the application starts
   */
  async start(): Promise<void> {
    for (const controller of this.controllers) {
      const methods = MetadataInspector.getAllMethodMetadata<RestEndpoint>(
        'openapi-v3:methods',
        controller,
      )
      if (!methods) {
        continue
      }
      for (const [method, endpoint] of Object.entries(methods)) {
        if (endpoint.verb !== 'get') continue
        const parameters = MetadataInspector.getAllParameterMetadata<ParameterObject>(
          'openapi-v3:parameters',
          controller,
          method,
        )
        if (!parameters) continue
        const index = parameters?.findIndex(
          (parameter) => parameter?.name === 'filter' && parameter?.in === 'query',
        )
        const schema = parameters?.[index]?.content?.['application/json']?.schema
        if (!schema || !('properties' in schema)) continue
        const paramWithPivot = param.query.object('query', {
          ...schema,
          properties: {
            ...schema.properties,
            pivot: {
              type: 'integer',
              minimum: 0,
            },
          },
        })
        paramWithPivot(controller, method, index)
        this.app.controller(controller.constructor)
      }
    }
  }
}
@lifeCycleObserver('controller-overrider'))
导出类PivotModelsObserver实现LifeCycleObserver{
建造师(
@inject.tag(RepositoryTags.REPOSITORY)
公共存储库:crudepository[],
@inject.tag(CoreTags.CONTROLLER)
公共控制器:控制器类[],
@注入(CoreBindings.APPLICATION\u实例)
公共应用程序:CoreApplication,
) {}
/**
*此方法将在应用程序启动时调用
*/
异步启动():承诺{
for(此.controllers的常量控制器){
const methods=MetadataInspector.getAllMethodMetadata(
“openapi-v3:方法”,
控制器,
)
如果(!方法){
持续
}
for(Object.entries(methods,endpoint)的常量[method,endpoint]){
如果(endpoint.verb!=“get”)继续
常量参数=MetadataInspector.getAllParameterMetadata(
“openapi-v3:参数”,
控制器,
方法,,
)
如果(!参数)继续
常数索引=参数?.findIndex(
(参数)=>parameter?.name=='filter'和¶meter?.in=='query',
)
常量模式=参数?[index]?.content?['application/json']?.schema
如果(!架构| |!(“架构中的属性”)继续
const paramWithPivot=param.query.object('query'{
…模式,
特性:{
…schema.properties,
支点:{
键入:“整数”,
最低:0,
},
},
})
paramWithPivot(控制器、方法、索引)
this.app.controller(controller.constructor)
}
}
}
}
有更好的方法吗?我试图通过“openapi-v3:parameters”访问参数,但我不确定这样做是否可以,因为该键也可能会更改,但主要问题是当我打印到控制台或看到控制器的元数据时,一切正常,但我无法在模式(openapi.json)中看到它,如果我尝试使用该过滤器,则会抛出错误