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

reactjs - การตั้งค่า state เริ่มต้นด้วย array ที่มี type ว่างใน Typescript และ React


พูดว่าฉันมีโค้ดตัวอย่างดังต่อไปนี้:

interface State {
  alarms: Alarm[];
}
export default class Alarms extends React.Component<{}, State> {
  state = {
    alarms: []
  };

เนื่องจากฉันพยายามตั้งค่า alarms: [] Typescript ไม่ชอบมัน เพราะว่า [] != Alarm[] ฉันพบว่าฉันสามารถใช้ alarms: new Array<Alarm>() ซึ่งจะสร้างอาร์เรย์ที่มีประเภทแต่ละค่าเป็น Alarm ที่ว่างเปล่า แต่ฉันไม่ค่อยชอบไวยากรณ์นี้ - มีวิธีที่ง่ายกว่าหรือดีกว่านี้ไหม?

คำตอบ #1

ปัญหาคือเมื่อคุณสร้างฟิลด์ในคลาส คอมไพเลอร์จะกำหนดประเภทของฟิลด์นั้นตามความเหมาะสม (โดยใช้ประเภทที่ระบุไว้โดยตรงหรือประเภทที่คาดเดาจากนิพจน์การเริ่มต้น เช่นในกรณีของคุณ)

ถ้าคุณต้องการประกาศฟิลด์ใหม่ คุณควรกำหนดประเภทอย่างชัดเจน:

export default class Alarms extends React.Component<{}, State> {
    state: Readonly<State> = {
        alarms: []
    };
}

หรือกำหนดสถานะในตัวสร้าง:

export default class Alarms extends React.Component<{}, State> {
    constructor(p: {}) {
        super(p);
        this.state = {
            alarms: []
        };
    }
}

คุณยังสามารถแปลงอาร์เรย์เป็นชนิดที่คาดหวังได้ แต่ถ้ามีฟิลด์มากๆ จะดีกว่าถ้าให้คอมไพเลอร์ตรวจสอบออบเจ็กต์ลิทเทอรัลให้คุณ

คำตอบ #2

จะ

alarms: [] as Alarm[]

ทำงานสำหรับ Typescript และสำหรับคุณไหม?

ดูคำถามนี้เกี่ยวกับวิธีที่คุณสามารถแปลงอาเรย์ใน Typescript : การแปลงอาเรย์ใน TypeScript

บทความที่เกี่ยวข้อง