DefinitelyTyped ha una soluzione Dojo che usa moduli nominati e può funzionare con Dojo legacy e tipizzazione esplicita, ma queste dichiarazioni non facilitano il TypeScript import
poiché non ci sono moduli anonimi. Sembra essere una versione più esauriente e coerente di schungx / Dojo-TypeScript ma senza i moduli dichiarati che rendono import
lavoro.
schungx / Dojo-TypeScript non consente "estensioni" di un import
Dijit ma fornisce sia named che dichiarazioni anonime.
Brian Forbes fornisce una definizione di dijit.d.ts che è buona a consumare dijits da TypeScript. La sua soluzione è disponibile qui . Funziona perfettamente con import
poiché utilizza dichiarazioni di moduli anonimi ma non consente ancora l'ereditarietà di TypeScript (anche il tipo incompatibile).
Il seguente codice mi permette di sviluppare wijits di tipoScript che estendono ContentPane
che effettivamente funziona (nonostante la compatibilità dell'ereditarietà).
declare module "dijit/layout/ContentPane"
{
class w extends dijit._Widget {
addChild(w: dijit._WidgetBase, index?: number);
}
export = w;
}
Estende la classe _Widget definita in schungx / Dojo-TypeScript e trucchi tsc
nel pensare al ContentPane
è una classe TypeScript.
Questo è ciò che significa extends ( d
è una classe derivata, b
è una classe base):
var __extends = this.__extends || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
};
La classe derivata ottiene tutte le proprietà di base incluso il prototipo. Ma sono stato avvertito più volte che questo non è sicuro.
Le mie domande:
-
È davvero pericoloso?
-
Esiste un approccio ragionevole per rendere questo sicuro? Non credo che il mio dattiloscritto Hack per estendere ContentPane sia ragionevole.