2016-03-18 67 views
1

我有一個私有變量,我用的打字稿的getter/setter獲得/集,例如:傳遞一個參考設定器

private _x:number; 

set x(value:number){ 
    _x = value; 
} 

get x():number{ 
    return _x; 
} 

是否有可能引用傳遞給這個二傳手,這樣我可以用它後來? 如果我嘗試傳遞object.x,那麼它當然會得到_x的值。

我知道我可以傳遞一個字符串「x」,然後像obj [「x」]那樣使用它,但這不會是一種很好的強類型練習,另外,我還需要傳遞一個對象。

回答

2

你可以得到使用Object.getOwnPropertyDescriptor()屬性描述上prototype給setter函數的引用,bind它到您的實例,然後調用它:

let setX:(x:number) => void = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(thing), "x").set.bind(thing); 

setX(123); 

但是,這是相當多的體操。我會做的就是寫一個包裝arrow function

let setX = (x:number):void => { thing.x = x }; 

setX(123); 

這很簡單,給你推斷的類型安全。 (由於某些原因,編譯器需要{ },即使它以任何方式發出相同的JS。)

Example in the playground