Skip to content

Allow AdditionalProperties behavior on parent class. #485

Open
@swallez

Description

@swallez

I would like to update the definition of DecayFunction by moving the decay function configuration represented with an AdditionalProperties behavior to DecayFunctionBase instead of on each leaf class. This makes the definition more correct as we can access the fields in DecayPlacement from a DecayFunction instance, and simpler by factorizing the behavior in the common parent class.

export class DecayFunctionBase<TOrigin, TScale> extends ScoreFunctionBase
  implements AdditionalProperty<Field, DecayPlacement<TOrigin, TScale>> {
  multi_value_mode?: MultiValueMode
}

export class NumericDecayFunction extends DecayFunctionBase<double, double> {}
export class DateDecayFunction extends DecayFunctionBase<DateMath, Time> {}
export class GeoDecayFunction extends DecayFunctionBase<GeoLocation, Distance> {}

export type DecayFunction =
  | DateDecayFunction
  | NumericDecayFunction
  | GeoDecayFunction

However, when doing so, the TypeScript generator doesn't generate the behavior on the DecayFunctionBase parent class but only on child classes, and it uses the open generic parameter names instead of their actual value (see <QueryDslTOrigin, QueryDslTScale> below):

export interface QueryDslDateDecayFunctionKeys extends QueryDslDecayFunctionBase<DateMath, Time> {
}
export type QueryDslDateDecayFunction = QueryDslDateDecayFunctionKeys |
    { [property: string]: QueryDslDecayPlacement<QueryDslTOrigin, QueryDslTScale> }

export interface QueryDslDateDistanceFeatureQuery extends QueryDslDistanceFeatureQueryBase<DateMath, Time> {
}

export type QueryDslDecayFunction = QueryDslDateDecayFunction | QueryDslNumericDecayFunction | QueryDslGeoDecayFunction

export interface QueryDslDecayFunctionBase<TOrigin = unknown, TScale = unknown> extends QueryDslScoreFunctionBase {
  multi_value_mode?: QueryDslMultiValueMode
}

I tried to fix the TS generator but this is a rather complex area and did not manage to find how to fix it. Halp needed!

Metadata

Metadata

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions