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

javascript - วิธีทำให้ประเภททั่วไปฐานรับรู้ประเภททั่วไปของลูกใน TypeScript?


มีวิธีใดที่จะทำให้สองประเภทเจเนอริกอยู่ในประเภทพื้นฐานหนึ่ง แต่ก็ยังทำให้หนึ่งในนั้นมีอีกประเภทหนึ่งเป็นเจเนอริกได้หรือไม่?

นี่คือโค้ดของฉัน:

interface ITreeNode extends IBaseNode{
}

interface IBaseTree<T extends IBaseNode> {
    nodeType: T
}

interface IBaseForest <T extends IBaseTree<T2 extends IBaseNode>> {
    treeType: T
    nodeType: T2 
}

ปัญหาคือ 'T2 ขยาย IBaseNode' ผมไม่สามารถตั้งค่าเป็นประเภทอื่นได้จริงๆ ในทางทฤษฎีผมไม่จำเป็นต้องทำ เพราะ baseTree รู้ประเภทของโหนดของมัน ผมไม่สามารถทำให้ forest เข้าใจว่าโหนดนี้คือใคร

ฉันขอโทษถ้าฉันไม่สามารถทำให้เข้าใจได้ และขอบคุณสำหรับการตอบกลับของคุณทุกครั้ง

คำตอบ #1

ฉันทำให้เรียบง่ายขึ้นเล็กน้อย

  • ลบ IBaseNode ออกเนื่องจากมันไม่ได้ถูกประกาศและไม่เกี่ยวข้องกับปัญหาของเรา ให้คิดว่า ITreeNode เป็นโหนดพื้นฐานของคุณ
  • ใช้ชื่อแทนแบบทั่วไปเพื่อให้สอดคล้องกับความตั้งใจ (เช่น K,V ในพจนานุกรม) ที่นี่ความตั้งใจคือ Node : N และ Tree : T

ดังนั้นสิ่งต่อไปนี้ทำในสิ่งที่ฉัน คิดว่า คุณต้องการ:

interface ITreeNode{}

interface IBaseTree<N extends ITreeNode> {
    nodeType: N;
}

interface IBaseForest<N extends ITreeNode,T> {
    treeType: T;
    nodeType: N;
}

อย่างไรก็ตาม หากคุณต้องการจำกัด T ด้วยตาม N คุณไม่สามารถทำได้เนื่องจากข้อจำกัดที่แสดงด้านล่าง:

ซึ่งเป็นไปตามข้อกำหนด

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