Vererbte Bindung
Feld-Decorators werden auch auf Felder angewendet, die in übergeordneten Klassen deklariert sind.
So können Sie gemeinsame Felder einmal in einer Basisklasse definieren und sie über Unterklassen hinweg wiederverwenden.
Beispiel
class BaseRequest {
@Body()
@Length(10)
id!: string
}
class CreateUserRequest extends BaseRequest {
@Body()
@OneOf(["admin", "user"])
role!: string
}
Ergebnis
CreateUserRequest wird die folgenden Felder haben:
-
id : von
BaseRequestgeerbt -
role : in
CreateUserRequestdefiniert
Wenn Sie CreateUserRequest an bindingCargo übergeben, werden sowohl das geerbte id als auch das lokal deklarierte role zusammen gebunden und validiert.
Erneutes Deklarieren eines geerbten Feldes
Das erneute Deklarieren eines geerbten Feldes in einer Unterklasse ersetzt die Definition der übergeordneten Klasse nicht — die Decorators beider Klassen werden auf demselben Feld zusammengeführt. Wird ein Source-Decorator auf diese Weise erneut angewendet (zum Beispiel @Body() auf einem Feld, das die übergeordnete Klasse bereits mit @Body() bezieht), entsteht ein Schema-Fehler:
Update.id: @Body + @Body cannot be combined; pick a single source
Jedes Feld sollte also in einer einzigen Klasse deklariert werden. Um zu ändern, wie ein Feld gebunden oder validiert wird, bearbeiten Sie es dort, wo es ursprünglich deklariert ist, anstatt es in einer Unterklasse erneut zu deklarieren.
Hinweise
- Felder werden über die gesamte Prototypenkette gesammelt, sodass mehrere Vererbungsebenen unterstützt werden.