วิธีการพิมพ์การเรียกต่อเนื่องกับอ็อบเจ็กต์ใน Typescript
ฉันจำเป็นต้องสร้างระบบแปลที่องค์ประกอบต่างๆ อยู่ในวัตถุ Typescript แบบนี้:
const fr: AppMessages = {
builder: {
actionButtons: {
preview: 'Visualisation',
...
},
},
};
ดังนั้นฉันจึงพิมพ์วัตถุด้วยชนิดนี้:
interface AppMessages extends Record<string, string | AppMessages> {}
แต่เมื่อฉันต้องการอ่านคีย์ย่อย:
const test: string = fr.builder.actionsButton.preview;
Typescript แสดงข้อผิดพลาดนี้กับฉัน: TS2339: Property 'actionsButton' ไม่มีอยู่ในประเภท 'string | AppMessages'. Property 'actionsButton' ไม่มีอยู่ในประเภท 'string'.
เป็นไปได้ไหมที่จะทำให้มันบอกฉันว่ากุญแจกลางส่งค่ากลับเป็นประเภทเฉพาะ ในกรณีนี้คือว่า builder ส่งค่ากลับเป็น AppMessages ไม่ใช่ string หรือว่ามันเป็นประเภทของฉันที่ฉันต้องเขียนให้ต่างออกไป?
ขอบคุณสำหรับการตอบกลับของคุณ!
คำตอบ #1
ถ้าออบเจ็กต์ messages ทั้งหมดของคุณถูกประกาศแบบคงที่ คุณสามารถใช้การยืนยัน const ได้เลย:
const fr = {
builder: {
actionButtons: {
preview: 'Visualisation'
},
},
} as const;
const t = fr.builder.actionButtons.preview;
