`index.d.cts` makes CommonJS TypeScript projects using `module: node16` fail with TS1479

Đang mở
#850 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 2 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
52/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
firebase, react, typescript

Hướng nghiên cứu

Start by reading the build:types-cjs script and comparing dist/index.d.ts with dist/index.d.cts; the issue says the latter is copied from the former. Reproduce the TS1479 errors with module and moduleResolution set to node16 and skipLibCheck: false, then inspect the local declaration re-exports. Done means the CommonJS TypeScript project can type-check its reactfire import without those errors.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

bug

A CommonJS TypeScript project that uses module: node16 and skipLibCheck: false cannot type-check an import of reactfire. I found this while reviewing #838, and it is already true on main.

What happens
  • tsc reports TS1479 on every line of node_modules/reactfire/dist/index.d.cts that imports or re-exports a local file: "The current file is a CommonJS module whose imports will produce 'require' calls; however, the referenced file is an ECMAScript module and cannot be imported with 'require'."
  • I got 11 of these on main and 12 on #838's head, where the extra one is the new ./utils.js re-export.
  • With skipLibCheck: true the errors go away and the imported types still resolve correctly, so projects with that setting are not affected.
  • attw reports all four resolution modes green, so the CI "Verify package" job does not catch it.
Steps to reproduce
  • Create a project with no "type" field in its package.json and a tsconfig.json with module and moduleResolution set to node16, skipLibCheck: false.
  • Install reactfire (I used a tarball packed from main at eb3376a), firebase 13.1.0 and React 19.
  • Import useUser from reactfire in a .ts file and run tsc.
Cause, as far as I can tell
  • The build:types-cjs script copies dist/index.d.ts to dist/index.d.cts, so the two files are identical.
  • The .d.cts file is treated as CommonJS, but it re-exports from ./auth.js and the other per-module declarations, which sit in a "type": "module" package and are therefore ESM.

I have not tried a fix. If emitting real CommonJS declarations is more than this is worth, documenting skipLibCheck: true for CommonJS projects may be enough.

Ngôn ngữ chính
TypeScript
Star
3.6k
Fork
402
Merge trung bình
2 ngày 3 giờ
Pull request đã merge (30 ngày)
26

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của FirebaseExtended/reactfire

Tất cả issue của FirebaseExtended/reactfire

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.