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

typescript - วิธีแชร์ไฟล์ global.d.ts จากหลายแพ็กเกจใน monorepo


ฉันมีคำนิยามอินเทอร์เฟซของผลลัพธ์จากหลายการสอบถามฐานข้อมูลอยู่ในไฟล์ global.d.ts เมื่อฉันย้ายโฟลเดอร์โปรเจกต์ต่างๆ ที่ใช้อินเทอร์เฟซเหล่านี้มาไว้ใน monorepo เดียวกัน ฉันยังคงใช้สำเนาของ global.d.ts เดิมในแต่ละแพ็กเกจเหมือนก่อน และมันทำงานได้ตามปกติ ยกเว้นเรื่องการทำซ้ำ ซึ่งดูไม่ค่อยสมเหตุสมผลใน monorepo

ฉันมีไฟล์ tsconfig.json แบบแชร์ที่อยู่ในรากของโปรเจกต์ ซึ่งถูกขยายโดยไฟล์ tsconfig.json ในแต่ละแพ็กเกจ

ฉันสามารถย้ายไฟล์ global.d.ts ไปที่รากของ monorepo และให้แพ็กเกจทั้งหมดใช้ไฟล์นั้นได้โดยไม่ต้องนำเข้ามันในแต่ละไฟล์ซอร์สได้อย่างไร?

ฉันพยายามเปลี่ยนใน tsconfig ของแต่ละแพ็กเกจ:

"include": ["./src/**/*"],
// into
"include": ["./src/**/*", "../../types/**/*"],

ฉันลองเพิ่ม typeRoots ใน tsconfig ราก:

"typeRoots": ["./node_modules/@types", ".types"]

ทั้งหมดก็ไร้ผล

สรุป: ฉันแค่อยากย้ายไฟล์ global.d.ts สองสำเนาที่เหมือนกันซึ่งกำลังทำงานอยู่ในแต่ละแพ็กเกจ ไปยังไฟล์เดียวในตำแหน่งทั่วไปและทำให้ tsc หาไฟล์นั้นเจอเหมือนกับที่ทำเมื่อมีสำเนาอยู่ในแต่ละแพ็กเกจ

ขอบคุณ

คำตอบ #1

ตอบตัวเอง (ขอโทษนะ ฉันเข้าใช้งานด้วยบัญชีอื่น ฉันควรแก้ไขเรื่องนั้น ฉันไม่รู้ว่าทำไมฉันถึงมีบัญชีต่างกัน)

วิธีแก้ปัญหาที่ดีที่สุดที่ฉันพบคือการใช้ reference:

/// <reference path="../../types/global.d.ts" />
/// <reference path="../../types/api.d.ts" />

ในตัวอย่างนี้ โฟลเดอร์ types อยู่ที่รากของ mono-repo มันไม่ใช่แพ็กเกจแต่ก็อาจจะเป็นก็ได้ มันไม่ได้สำคัญจริง ๆ ขึ้นอยู่กับคุณ ฉันได้แบ่งไฟล์ global.d.ts เดียวที่ฉันตั้งใจจะมี ออกเป็นหลายไฟล์ที่เจาะจงมากขึ้น การอ้างอิงจำเป็นต้องอยู่ในไฟล์ใด ๆ เพียงครั้งเดียวในแต่ละแพ็กเกจ ฉันเลือกที่จะใส่มันในไฟล์ index.ts หรือ index.tsx ที่ราก ซึ่งดูเหมือนจะเป็นตำแหน่งที่เหมาะสมที่สุดสำหรับมัน

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

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