2013-03-14 22 views
9

Voglio creare una variabile con le proprietà get/set all'interno di un modulo. Ho visto alcuni esempi di lavoro per la creazione di una/proprietà get set all'interno di una classe che assomiglia a questo:Creazione di una variabile con get/set all'interno di un modulo in Typescript

class MyClass { 
    private view; 
    get View() { return this.view; } 
    set View(value) { this.view = value } 
} 

Ma io voglio fare lo stesso all'interno di un modulo:

module MyModule { 
    export var view; 
    //I want to create get/set methods for view property here 
} 

Come posso fare quella ?

risposta

11

Penso che sia solo una svista; Lo farò con il team di progettazione (non vedo alcuna ovvia ragione per cui sarebbe stato vietato a parte "non l'abbiamo ancora implementato"). È abbastanza semplice aggirare la mancanza di un supporto linguistico di prima classe:

module Bar { 
    var _qua = 42; 

    declare export var qua: number; 
    Object.defineProperty(Bar, 'qua', { 
     get: function() { return _qua; }, 
     set: function(value) { _qua = value; } 
    }); 
} 

// Works 
var x = Bar.qua; 
console.log(x); 
Bar.qua = 19; 
console.log(Bar.qua); 
+5

Ancora non implementato? – oligofren

+0

@ ryan-cavanaugh Qualche aggiornamento su questa funzione e se sarà mai implementato? In caso contrario, mi piacerebbe sapere perché! – bnieland

5

Gli accessors sono solo per "membri". I membri possono essere solo parte di una classe, almeno così è il dattiloscritto.

Gli accessor sono definiti sul prototipo delle classi, qualcosa che un modulo non ha. Se lo desideri, puoi definirlo manualmente e funziona.

module MyModule { 
    var view; 
    export var View; 
    Object.defineProperty(MyModule, "View", { 
     get: function() { 
      console.log(1); 
      return view; 
     }, 
     set: function (val) { 
      console.log(2, val); 
      view = val; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
} 

MyModule.View = 555; 
window["mm"] = MyModule.View; 

Come previsto, ho avuto l'output di:

> 2 555 
> 1 

Anche se onestamente non avrei :)

0

Si può anche avvolgere in una classe con proprietà statiche:

module MyModule { 
    export class MyClass { 
    private static view; 
    static get View() { return this.view; } 
    static set View(value) { this.view = value } 
    } 
} 
Problemi correlati