Tìm kiếm trang web

typescript - Làm thế nào để xuất các khai báo TS của tôi ra gói NPM?


Tôi có một số kho lưu trữ chia sẻ một số chức năng. Tôi muốn xuất khai báo kiểu (và chỉ những kiểu đó) sang gói NPM, để tôi có thể cài đặt chúng và sử dụng trong một vài dự án của mình.

Trong thư mục gốc, tôi có thư mục /declarations, chứa một loạt các tệp *.d.ts, mà chứa những phần của mã mà tôi muốn công khai. Đây là một ví dụ:

// declarations/maps.d.ts

declare interface LatLng {
  lat: number;
  lng: number;
}

declare interface MapMarker {
  id: string;
  position: LatLng;
}

Tôi đã tìm kiếm trên Google về vấn đề này, nhưng không có nhiều tài liệu về nó, và những gì có sẵn dường như thực sự khác nhau. Liên quan đến vấn đề này, tôi có một số câu hỏi:

  1. Để cài đặt và sử dụng chúng trong dự án khác, tôi có nên xuất các tệp với phần mở rộng *.d.ts hay chuyển chúng sang *.ts không?
  2. Tôi hiểu rằng, để xuất tất cả các tệp từ thư mục declarations, tôi nên tạo một tệp index.d.ts (hoặc có thể là index.ts)?
  3. Liệu tôi có thực sự cần biên dịch mã nguồn trước bằng một lệnh nào đó như npm run build hoặc rollup thành các tệp javascript thuần túy trước không? Hay có thể chỉ cần nhập mã nguồn trực tiếp vào dự án khác của tôi là đủ?
  4. Khi tôi cố gắng xuất các tệp khai báo từ maps.d.ts, Typescript báo lỗi rằng "maps.d.ts không phải là một module". Điều này có nghĩa là tôi cần phải bao tất cả các tệp vào một cái gì đó như: declare module 'mapsModule' { export interface (...) }
  5. Nếu không, thì export interface MapMaker { id: string } thông thường có đủ không?
  6. Tôi hiểu rằng tôi cần phải "nhắc" cho trình biên dịch để xem các kiểu bằng cách thêm thuộc tính "types" trong package.json? Tức là, chỉ định tệp khai báo chính trong tệp package.json của tôi bằng cách nói:
  7. Tôi có cần thêm một tệp index.ts (hoặc index.d.ts) khác trong thư mục gốc của mình nơi tôi nhập các thứ từ /declarations/index.d.ts không?

Kế hoạch của tôi, sau khi tôi tìm ra và có các loại hoạt động, là xuất bản mọi thứ lên gói NPM để tôi có thể cài đặt nó ở mọi nơi một cách dễ dàng, nhưng đó chỉ là bước tiếp theo.

Tôi hiểu rằng những câu hỏi mà tôi đang có không được cấu trúc hoàn hảo và tôi có thể nhầm lẫn giữa các thuật ngữ và chức năng, nhưng xin lưu ý rằng tôi vẫn chưa có nhiều kinh nghiệm với Typescript. Tôi thậm chí sẽ đánh giá cao một số mẹo chỉ dẫn tôi đến tài liệu nơi tôi có thể tự học về chủ đề này. Cảm ơn bạn trước vì câu trả lời của bạn.

Câu trả lời #1

Theo hướng dẫn này Làm thế nào để cấu hình các giao diện toàn cục tùy chỉnh (.d.ts files) cho TypeScript?, và câu trả lời phổ biến nhất ở đây của Daniel Tabuenca, tôi đã nhận ra rằng:

Các "giao diện có sẵn một cách kỳ diệu" hoặc các kiểu toàn cục không được khuyến khích và nên chủ yếu để dành cho các mã cũ. Ngoài ra, bạn không nên sử dụng các tệp khai báo ngữ cảnh (ví dụ: các tệp .d.ts) cho mã mà bạn đang viết. Đối với mã bạn viết, bạn nên sử dụng các tệp .ts thông thường để định nghĩa các giao diện và kiểu của mình.

Điều đó không hoàn toàn giải quyết được vấn đề của tôi, nhưng ít nhất cũng có một manh mối tốt về nguyên nhân có thể gây ra nó.