Ich habe ein Problem, das diese Fehler auf der Konsole erzeugt.Typoskript - Generika? Oder etwas anderes?
Type 'WebFieldB' does not satisfy the constraint 'WebFieldA & WebFieldB'.
Es gibt 2 vom Server generierte Klassen, die nicht geändert werden sollten.
class WebFieldA {
readonly Name: string;
readonly IsUpdatable: boolean;
}
class WebFieldB {
readonly Name: string;
}
Und dies ist mein Code:
interface IFieldInfo {
name: string;
isUpdatable: boolean;
}
class SomeField<T extends WebFieldA & WebFieldB> implements IFieldInfo {
field: T;
constructor(pField: T) {
this.field = pField;
}
get name(): string {
return this.field.Name;
};
get isUpdatable(): boolean {
return this.field.IsUpdatable || false;
}
}
let field1: IFieldInfo = new SomeField<WebFieldA>({Name: 'fieldA', IsUpdatable: false});
let field2: IFieldInfo = new SomeField<WebFieldB>({Name: 'fieldB'}); **// Here for WebFieldB is error**
let myCollection: Array<IFieldInfo> = [field1, field2];
Was erwarte ich? Ich hätte gerne eine Sammlung von IFieldInfo
aus Objekten von 2 Arten gebaut: WebFieldA
und WebFieldB
(WFB hat keine isUpdatable
Eigentum!). Leider kann ich nur meinen Code ändern, nicht WebFieldA
oder WebFieldB
.
Und vielleicht eine andere Idee, dies ohne Generika zu machen? Ich weiß nicht ...
Sie sollten wahrscheinlich den Typwächter in etwas ändern, das 'this.field.IsUpdatable' direkt (strukturell) testet, da der Beispielcode gegen Objekte testet, die nicht 'instanceof' der Klassen 'WebFieldA' oder 'WebFieldB' sind. – jcalz
Es hat funktioniert. Danke vielmals! :-) – str1ct
@ str1ct, sei vorsichtig, teste gegen '(new SomeField ({Name: 'fieldA', IsUpdatable: true})). IsUpdatable' zur Laufzeit –
jcalz