การใช้โอเปอเรเตอร์เสริมเพิ่มเติมสำหรับการเข้าถึงคุณสมบัติของวัตถุ


14

TypeScript 3.7 รองรับผู้ให้บริการเครือข่ายเสริม ดังนั้นคุณสามารถเขียนรหัสเช่น:

const value = a?.b?.c;

คือคุณสามารถใช้ดำเนินการนี้เพื่อเข้าถึงคุณสมบัติของวัตถุที่วัตถุเองอาจจะเป็นหรือnull undefinedตอนนี้สิ่งที่ฉันต้องการจะทำคือโดยทั่วไปเหมือนกัน แต่ชื่อคุณสมบัติเป็นแบบไดนามิก:

const value = a?[b]?.c;

อย่างไรก็ตามมีฉันได้รับข้อผิดพลาดทางไวยากรณ์:

ข้อผิดพลาด TS1005: ':' คาดว่า

ฉันทำอะไรผิดที่นี่ เป็นไปได้ไหม

PS: ข้อเสนอดูเหมือนจะบอกเป็นนัยว่าเป็นไปไม่ได้😕 (แต่บางทีฉันอาจได้รับตัวอย่างไวยากรณ์ผิด)


1
คุณพลาดจุดดำเนินการคือ?.
zessx

ใช่แน่นอนขอบคุณมาก😊
Golo Roden

คำตอบ:


17

เมื่อเข้าถึงคุณสมบัติโดยใช้เครื่องหมายวงเล็บและการผูกมัดเสริมคุณจำเป็นต้องมีจุดเพิ่มเติมจากวงเล็บ:

const value = a?.[b]?.c;

นี่คือไวยากรณ์ที่นำมาใช้โดยข้อเสนอ TC39เพราะมิฉะนั้นมันยากสำหรับ parser ที่จะคิดออกว่านี่?เป็นส่วนหนึ่งของการแสดงออกที่ประกอบไปด้วยสามส่วนหรือเป็นส่วนหนึ่งของการผูกมัดเสริม


1
ฉันต้องการแทนที่อย่างหนักกับเป็นไปไม่ได้
vol7ron

@ vol7ron ทำไมถึงเป็นเช่นนั้น - ฉันคิดว่ามันจะตั้งตารอ:
AnArrayOfFunctions

มันจะไม่สามารถแยกแยะได้โดยเฉพาะเมื่อมีข้อผิดพลาด
vol7ron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.