Ich versuche eine DefinitelyTyped TS-Definitionsdatei für eine JS-Klasse zu implementieren, die je nach ihrer Instanziierung unterschiedliche Definitionen hat. Die Definitionen sind gut definiert und ändern sich nach der Instanziierung nicht.
Beispiel:Wie erstelle ich eine TypeScript-Definitionsdatei für eine Klasse, deren Eigenschaften sich je nach Instanziierung ändern
var a = new MyClass("foo");
console.log(a.a);//"a"
console.log(a.b);//"b"
console.log(a.c);//"c"
console.log(a.d);//"undefined"
console.log(a.e);//"undefined"
console.log(a.f);//"undefined"
var b = new MyClass("bar");
console.log(b.a);//"undefined"
console.log(b.b);//"undefined"
console.log(b.c);//"c"
console.log(b.d);//"d"
console.log(b.e);//"e"
console.log(b.f);//"f"
ich wie ein TS-Definition etwas möchten:
interface myInterface{
c:string;
}
class MyClass("foo") implements myInterface{
a:string;
b:string;
c:string;
}
class MyClass("bar") implements myInterface{
c:string;
d:string;
e:string;
f:string;
}
Alle Zeiger sehr geschätzt
EDIT wäre: Klarstellung: Ich nicht MyClass
auch ändern kann, gibt es eine Vielzahl von verschiedenen Möglichkeiten der Instanziierung MyClass
, aber sie sind alle gut bekannt und definiert im Voraus der Zeit. Wir können auch annehmen, dass wir uns nicht um den Fall einer nicht existierenden Variante von MyClass
kümmern müssen.
Darüber hinaus ist MyClass
am besten als eine Fabrik beschrieben, die den Zugriff auf eine Datenbank ermöglicht; so würde new MyClass("foo")
ein Objekt erstellen, die den Zugriff auf die foo Tabelle in der Datenbank ermöglicht, wo die Feldnamen sind nun Eigenschaften des erzeugten MyClass
Objekt
Wenn sie anders sind, warum ist es die gleiche Klasse? Warum nicht zwei verschiedene Klassen machen? – Alex
Die Syntax 'Klasse MyClass (" foo ") implementiert myInterface {' ist falsch. –
Sie suchen nach dem Fragezeichen ('?'), Wie in 'd ?: string;'. –