สมมติว่ามีไฟล์พิมพ์สำหรับไลบรารี X ซึ่งมีอินเทอร์เฟซบางอย่าง
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
ในการทำงานกับไลบรารีนี้ฉันต้องส่งผ่านวัตถุที่เป็นประเภทเดียวกันกับI2.y
. แน่นอนฉันสามารถสร้างอินเทอร์เฟซที่เหมือนกันในไฟล์ต้นฉบับของฉัน:
interface MyInterface {
a: I1,
b: I1,
c: I1
}
let myVar: MyInterface;
แต่แล้วฉันก็ได้รับภาระในการอัปเดตให้เป็นปัจจุบันจากไลบรารียิ่งไปกว่านั้นอาจมีขนาดใหญ่มากและส่งผลให้มีการทำซ้ำรหัสจำนวนมาก
ดังนั้นมีวิธีใดบ้างที่จะ "แยก" คุณสมบัติเฉพาะของอินเทอร์เฟซประเภทนี้ออกมา สิ่งที่คล้ายกับlet myVar: typeof I2.y
(ซึ่งใช้ไม่ได้ผลและทำให้เกิดข้อผิดพลาด "ไม่พบชื่อ I2") ขอบคุณล่วงหน้า.
แก้ไข : หลังจากเล่นเล็กน้อยใน TS Playground ฉันสังเกตเห็นว่ารหัสต่อไปนี้บรรลุสิ่งที่ฉันต้องการ:
declare var x: I2;
let y: typeof x.y;
อย่างไรก็ตามต้องมีx
การประกาศตัวแปรซ้ำซ้อน ฉันกำลังมองหาวิธีที่จะบรรลุสิ่งนี้โดยไม่ต้องประกาศนั้น