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

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

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