typescript - ส่งการอ้างอิงไปยังตัวตั้งค่า
ฉันมีตัวแปรส่วนตัวซึ่งฉันสามารถรับ/ตั้งค่าด้วย getter/setter ของ TypeScript เช่น:
private _x:number;
set x(value:number){
_x = value;
}
get x():number{
return _x;
}
เป็นไปได้ไหมที่จะส่งอ้างอิงไปยังตัวตั้งค่านี้เพื่อให้ฉันสามารถใช้มันในภายหลัง? ถ้าฉันพยายามส่ง object.x มันก็ตั้งแน่นอนว่าจะได้ค่าของ _x
ฉันรู้ว่าฉันสามารถส่งสตริง, "x", แล้วใช้มันเหมือน obj["x"], แต่จะไม่ใช่แนวทางการพิมพ์ชนิดข้อมูลที่ดี และนอกจากนี้ ฉันยังจะต้องส่งอ็อบเจ็กต์ด้วย
คำตอบ #1
คุณสามารถรับการอ้างอิงไปยังฟังก์ชัน setter จากตัวบรรยายคุณสมบัติโดยใช้ Object.getOwnPropertyDescriptor() บนโปรโตไทป์ ผูกมันเข้ากับอินสแตนซ์ของคุณ จากนั้นเรียกใช้งานมัน:
let setX:(x:number) => void = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(thing), "x").set.bind(thing);
setX(123);
แต่นี่ค่อนข้างจะเป็นยิมนาสติกมาก สิ่งที่ฉันจะทำคือเขียนฟังก์ชันลูกศรห่อหุ้ม:
let setX = (x:number):void => { thing.x = x };
setX(123);
นี่เป็นเรื่องง่ายและให้ความปลอดภัยของประเภทที่สรุปได้แก่คุณ (ด้วยสาเหตุบางประการ { } จำเป็นสำหรับตัวคอมไพเลอร์แม้ว่าจะสร้าง JS เดียวกันในทุกกรณี)
ตัวอย่างในสนามเด็กเล่น
