Gehen Sie von einem vorhandenen JavaScript-Framework aus, für das Sie Typisierungen erstellen möchten. Der Javascript-Code verwendet Node.js Module, prototypische Vererbung und Mixins:Beschreiben von Mixins in einer Deklarationsdatei
// File: src/lib/a.js
function A() {
this.isA = true;
this.type = 'a';
}
module.exports = A;
// File: src/lib/b.js
var A = require('./a');
var plugin = require('./plugin');
function B() {
A.call(this);
this.isB = true;
this.type = 'b';
plugin(this);
}
B.prototype = object.create(A.prototype);
B.prototype.constructor = B;
module.exports = B;
// File: src/lib/plugin.js
function plugin(obj) {
obj.doSomethingFancy = function() {
// ...
}
}
module.exports = plugin;
Wie würden Sie in einer Deklarationsdatei beschreiben B
so dass es vermittelt, dass einige Mitglieder von/über den Konstruktor erstellt werden?
Diese Frage bezieht sich auf Umgebungsdeklarationen, nicht auf die Implementierung. Nehmen Sie außerdem an, dass eine untergeordnete Klasse möglicherweise entscheidet, ihren übergeordneten Konstruktor nicht aufzurufen. – ciss
@ciss Ich bin mir nicht bewusst, wie die Tatsache, dass Mitglieder vom Konstruktor erstellt werden, vermittelt werden kann. Wenn du die Möglichkeit eines unbestimmten Mitglieds vermitteln willst, suffixe es mit '?', Wie 'isA?'. Apropos abgeleiteter Typ, der den Basistyp-Konstruktor nicht aufruft, dies führt wahrscheinlich zu einem TS-Fehler, aber wenn dies nur eine Bibliotheksdefinition ist, können Sie Ihren Compiler anweisen, Fehler in externen Bibliotheken zu ignorieren. –