2016-03-18 24 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