ฉันกำลังพยายามกำหนดวัตถุที่มีสัญลักษณ์เป็นชนิดคีย์เนื่องจาก MDN พูดว่า:
ค่าสัญลักษณ์อาจใช้เป็นตัวระบุสำหรับคุณสมบัติของวัตถุ [... ]
แต่ใช้เป็นชนิดสำหรับคุณสมบัติคีย์:
type obj = {
[key: symbol | string]: string
}
ผลลัพธ์ในข้อผิดพลาดต่อไปนี้:
TS1023: ชนิดพารามิเตอร์ดัชนีลายเซ็นต้องเป็น 'สตริง' หรือ 'หมายเลข'
แม้จะสามารถใช้เป็นดัชนีชนิด ฉันใช้รุ่น typescript ล่าสุด ( v3.7.2
) คำถามที่เกี่ยวข้องที่ฉันพบ:
- typescript: การทำลายวัตถุที่มีสัญลักษณ์เป็นกุญแจ (เขาใช้อินสแตนซ์ที่แท้จริงของ Symbol, ฉันต้องการประเภท
symbol
) - TypeScript: พารามิเตอร์ลายเซ็นดัชนีจะต้องเป็น 'สตริง' หรือ 'หมายเลข' เมื่อพยายามใช้สตริง | จำนวน
- ES6: การทำลายวัตถุที่มีสัญลักษณ์เป็นกุญแจ (นั่นไม่สามารถแก้ปัญหาได้ - ดูเหมือนว่าผิดที่จะใช้อินสแตนซ์ที่เกิดขึ้นจริงเป็นประเภทเนื่องจากทุกอินสแตนซ์ Symbol ไม่ซ้ำกัน ... )
ฉันได้ดูที่เอกสารสัญลักษณ์ typescriptแต่พวกเขาก็แสดงให้เห็นว่ามันถูกใช้เป็นค่าอย่างไรไม่ใช่ประเภท
ตัวอย่าง:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
@Bergi ฉันได้เพิ่มตัวอย่างบางทีฉันอาจจะดูแลบางอย่าง แต่ฉันไม่สามารถหาวิธีที่จะนำ ts เพื่อรับสัญลักษณ์ (โดยไม่ต้องใช้
—
Simon
any
ซึ่งเป็นการฝึกฝนที่ไม่ดี)
ไม่แน่ใจว่าถูกต้องหรือไม่ แต่คุณลองใช้
—
pavan kumar
Map<Symbol,String>
ในขณะที่เรามีแผนที่ถ้านั่นจะให้บริการตามวัตถุประสงค์ของสิ่งที่คุณพยายามที่จะบรรลุ
ปัญหาเดียวกันสำหรับฉันฉันเดาว่าส่วนที่น่ารำคาญคือโฆษณาเท็จว่า "TS เป็น superset ของ JS" อย่างไร - ก็ไม่เชิง นี่เป็นตัวอย่างที่สมบูรณ์แบบของสิ่งนั้น
—
Patrick
symbol
เหรอ? อาจแสดงตัวอย่างว่าคุณต้องการใช้งานอย่างไรtype obj
- ฉันสงสัยว่าคุณสมบัติที่เป็นสัญลักษณ์สัญลักษณ์ทั้งหมดจะเป็นstring
s