Esiste un modo ragionevole per una classe TypeScript di derivare da una classe Dojo / Dijit?

7

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:

posta Corey Alix 04.12.2014 - 20:02
fonte

0 risposte

Leggi altre domande sui tag