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 คุณไม่สามารถทำได้เนื่องจากข้อจำกัดที่แสดงด้านล่าง:
ซึ่งเป็นไปตามข้อกำหนด
