การใช้ `export` ภายในไฟล์ `d.ts` เหมาะสมหรือไม่
ฉันกำลังพยายามสร้างไฟล์สำหรับประเภทที่ใช้ทั่วโลกในแอปของฉัน
reduxState.d.ts
declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}
 
    ด้วยโค้ดด้านบน ฉันสามารถดูสมาชิกของฉันnamespaceและสมาชิกในไฟล์โครงการของฉันได้แล้ว
แล้วโค้ดด้านบนกับโค้ดต่อไปนี้ที่ใช้exportสำหรับnamespaceสมาชิกต่างกันอย่างไร
declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}
 
    พวกเขาทั้งสองดูเหมือนจะทำงานได้ดี อะไรคือความแตกต่าง?
จาก:https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing
เนื่องจากเราต้องการให้อินเทอร์เฟซและคลาสที่นี่ปรากฏให้เห็นภายนอกเนมสเปซ เราจึงนำหน้าด้วยการส่งออก
ในข้อความที่ตัดตอนมาจาก DOC นี้ ดูเหมือนว่าพวกเขากำลังอ้างถึง a namespaceที่ประกาศภายใน a tsและไม่ใช่d.tsไฟล์ นั่นเป็นเหตุผลที่คุณต้องการexportในกรณีนั้นหรือไม่
มันสมเหตุสมผลไหมที่จะใช้exportภายในd.tsไฟล์?
คำตอบ
*.d.tsไฟล์มีไว้สำหรับคำจำกัดความ ไฟล์เหล่านี้จะถูกละเว้นโดยสิ้นเชิงในขณะใช้งานจริง หากคุณเขียนโค้ด JS เพราะคุณมีไลบรารี่หรือบางอย่าง ฉันขอแนะนำอย่างยิ่งให้ใช้คีย์เวิร์ดส่งออก เพราะจะทำให้ผู้ใช้รายอื่นเห็นว่าพวกเขาจะสามารถใช้อะไรจากโค้ดของคุณได้ง่ายขึ้น (สิ่งที่คุณทำไม่ได้ ส่งออกนำเข้าที่อื่นไม่ได้แน่นอน)
กรณีการใช้งานของคุณ: ทุกสิ่งที่ส่งออกจากเนมสเปซสามารถใช้ภายนอกได้อย่างอิสระ หมายความว่าคุณสามารถทำสิ่งที่ชอบ
const obj: MyProject.SomeInterface = { someProperty: 20 };
 
     เนื่องจากคุณใช้*.d.tsไฟล์และไม่ใช่*.tsไฟล์ มันจะไม่สร้างความแตกต่างให้กับคุณตราบเท่าที่คุณส่งออกเฉพาะส่วนต่อประสาน เนื่องจากพวกมันจะถูกละเว้นในเวลาคอมไพล์
ข้อสังเกตประการสุดท้าย: *.d.tsไฟล์ต่างๆ ทำให้คุณสามารถดูเนื้อหาของคุณในโปรเจ็กต์ทั้งหมดได้ แต่ถ้าคุณวางแผนที่จะนำเข้าฟังก์ชันหรือคล้ายกันจากที่นั่น คุณจะต้องนำเข้าก่อนอย่างชัดเจน