ค้นหาเว็บไซต์

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 เดียวกันในทุกกรณี)

ตัวอย่างในสนามเด็กเล่น