javascript - แนวทางปฏิบัติที่ดีที่สุดสำหรับการกำหนดชนิดของ TypeScript
ฉันได้อ่านผ่านหน้าสิบหน้าหลายหน้าเพื่อพยายามหาวิธีที่ดีที่สุดในการตั้งค่าการกำหนดประเภทของฉันใน TypeScript
- ฉันเคยมีไฟล์
typings.tsอยู่ที่ไหนสักแห่งในโปรเจกต์ของฉัน และจากนั้นก็จะนำเข้าประเภทในทุกไฟล์ที่ต้องการ โดยทำบางอย่างเช่น
import {IMyCustomType} from './typings';และภายในไฟล์ typings ของฉัน ฉันจะประกาศประเภทของฉันแบบ:
export interface IMyCustomType {...}- หลังจากที่ทำงานบางอย่างกับ boilerplate นี้: https://github.com/rokoroku/react-redux-typescript-boilerplate/tree/master/types, ฉันได้ตระหนักว่าพวกเขาใช้
models.d.tsในโฟลเดอร์typesที่อยู่ที่ root ของโปรเจกต์
แทนที่จะใช้ export interface IMyCustomType {..} พวกเขาใช้ declare interface IMyCustomType {..}
การตั้งค่านี้มีข้อได้เปรียบใหญ่สำหรับฉัน: ฉันไม่จำเป็นต้องนำเข้าประเภทต่าง ๆ อย่างชัดเจนในแต่ละไฟล์ และอินเทอร์เฟซจะสามารถใช้งานได้โดยตรงในทั้งโครงการ
คำถาม:
1) ถูกต้องหรือไม่ที่ไฟล์ **/*.d.ts ทั้งหมดจะถูกนำเข้าโดยอัตโนมัติในระหว่างการคอมไพล์ ?
2) การใช้ declare และทำให้ทุกประเภทสามารถใช้งานได้ทั่วทั้งโปรเจกต์เป็นแนวทางปฏิบัติที่ดีหรือไม่?
3) มีเส้นทางไดเรกทอรีและชื่อมาตรฐานที่ฉันควรวางคำนิยามประเภทของฉันไว้หรือไม่?
โดยพื้นฐานแล้วฉันกำลังพยายามที่จะทำให้ interface ระดับโลกของฉันสามารถใช้งานได้โดยอัตโนมัติทุกที่ในโครงการของฉันโดยไม่ต้อง import พวกมันอย่างชัดเจน นี่เป็นสิ่งที่ฉันควรทำหรือไม่ และฉันควรตั้งค่าโครงการของฉันอย่างไรเพื่อให้ทำได้?
อัปเดต
หลังจากที่ผมได้ยกเรื่องนี้ขึ้นมาหารือกับทีม ส่วนใหญ่ไม่เห็นด้วยกับการมีประเภทแบบแวดล้อม ดังนั้นเราจึงตัดสินใจที่จะนำเข้าประเภทเมื่อจำเป็น เพื่อให้สิ่งนี้ง่ายขึ้น เราจึงพึ่งพา IDE ของเราในการนำเข้าประเภทดังกล่าวโดยอัตโนมัติ
คำตอบ #1
ตั้งแต่ TypeScript 2 เป็นต้นไป คุณควรใช้ไฟล์ d.ts ด้วยวิธีนี้คุณจะลดไฟล์คอนฟิกของคุณได้มาก
คุณสามารถหาข้อมูลเพิ่มเติมเกี่ยวกับมันได้ที่:
- typings กับ @types ขอบเขต NPM
- https://georgedyrra.com/2017/06/04/migrating-from-typings-to-npm-types/
คำตอบ #2
คุณควรใช้สโคป NPM @types คุณสามารถหาคู่มือที่ละเอียดกว่านี้ได้ในคู่มือ Typescript แต่โดยพื้นฐานแล้ว สิ่งที่คุณต้องทำคือรันคำสั่ง NPM:
npm install --save @types/lodash
เกี่ยวกับคำถามของคุณ โดยหลักแล้วการใช้วิธีนี้คุณไม่จำเป็นต้องกังวลเกี่ยวกับไฟล์กำหนดประเภทเลย การมีอยู่ของพวกมันสำหรับไลบรารีบุคคลที่สามเป็นเรื่องที่โปร่งใสต่อคุณ (คุณไม่ต้องสนใจว่าพวกมันถูกวางที่ไหนหรือวิธีการนำเข้าพวกมัน คุณเพียงแค่ต้องนำเข้ามอดูลเอง)
เกี่ยวกับการใช้ declare ผมคิดว่านั่นเป็นหัวข้อแยกต่างหาก แต่คุณสามารถดูคำถามนี้ได้: ความแตกต่างระหว่าง "declare class" กับ "interface" ใน TypeScript
