传递对setter的引用

时间:2016-03-18 16:16:54

标签: typescript

我有一个私有变量,我使用typescript getter / setter获取/设置,例如:

private _x:number; 

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

get x():number{
   return _x;
}

是否可以传递对此setter的引用,以便以后可以使用它? 如果我尝试传递object.x,那么它当然得到_x的值。

我知道我可以传递一个字符串“x”,然后像obj [“x”]一样使用它,但这不是一个好的强类型练习,而且,我还需要传递一个对象。

1 个答案:

答案 0 :(得分:2)

您可以使用Object.getOwnPropertyDescriptor()上的prototypebind将{> 3}}引用到您的实例,从属性描述符中获取对setter函数的引用,然后调用它:

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