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

วิธีการพิมพ์การเรียกต่อเนื่องกับอ็อบเจ็กต์ใน 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;