我有一个私有变量,我使用typescript getter / setter获取/设置,例如:
private _x:number;
set x(value:number){
_x = value;
}
get x():number{
return _x;
}
是否可以传递对此setter的引用,以便以后可以使用它? 如果我尝试传递object.x,那么它当然得到_x的值。
我知道我可以传递一个字符串“x”,然后像obj [“x”]一样使用它,但这不是一个好的强类型练习,而且,我还需要传递一个对象。
答案 0 :(得分:2)
您可以使用Object.getOwnPropertyDescriptor()
上的prototype,bind将{> 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。)