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

typescript - ระบุอาร์เรย์เป็นทูเพิล


ตัวอย่างเช่น ฉันมีคลาสนามธรรม:

type Tuple = [string, number]

abstract class SomeAbstractClass {
    tuples: Tuple[]
}

แต่เมื่อฉันต้องการใช้งานคลาสนี้

class SomeConcreteClass implements SomeAbstractClass {
    public tuples = [
        ['hello', 3],
        ['world', 4]
    ]
}

ฉันได้รับข้อผิดพลาด '(string | number)[][] ไม่สามารถกำหนดค่าให้กับ Tuple[]' วิธีที่จะบอก Typescript ว่าอาร์เรย์ที่ฉันให้มานั้นตรงตามอินเทอร์เฟซจริงๆ คืออะไร?

คำตอบ #1

เพียงแค่ใช้ชนิดข้อมูลที่ชัดเจน:

type Tuple = [string, number]

abstract class SomeAbstractClass {
    tuples: Tuple[] = null as any
}

class SomeConcreteClass implements SomeAbstractClass {
    public tuples: Tuple[] = [
        ['hello', 3],
        ['world', 4]
    ]
}

สมบัติ tuples ของ SomeConcreteClass สามารถเปลี่ยนแปลงได้ ดังนั้น TypeScript จึงไม่แน่ใจว่ามันสามารถกำหนดค่าให้กับ tuples ของคลาสนามธรรมได้หรือไม่