microsoft / microsoft/TypeScript

TS2742 “The inferred type of 'default' cannot be named” with ESLint `defineConfig`

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

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

Domain: Declaration Emit Help Wanted Possible Improvement
Ngôn ngữ chính
Go
Star
111k
Fork
14.3k
Merge trung bình
2 ngày 4 giờ
Pull request đã merge (30 ngày)
132

Mô tả

🔎 Search Terms

TS2742, 2742, composite, pnpm

🕗 Version & Regression Information
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about TS2742
⏯ Playground Link

No response

💻 Code

eslint.config.ts

import { defineConfig } from "@eslint/config-helpers";
export default defineConfig();

node_modules/@eslint/config-helpers/index.d.ts

export type Config = import("@eslint/core").ConfigObject;
export function defineConfig(): Config;

node_modules/@eslint/config-helpers/node_modules/@eslint/core/index.d.ts

export interface ConfigObject {}

tsconfig.json

{
  "compilerOptions": {
    "composite": true
  }
}

(No other files are needed for this test case; there’s nothing else in node_modules.)

🙁 Actual behavior

No error.

🙂 Expected behavior

eslint.config.ts(2,1): error TS2742: The inferred type of 'default' cannot be named without a reference to '@eslint/config-helpers/node_modules/@eslint/core'. This is likely not portable. A type annotation is necessary.

Additional information about the issue

In eslint/rewrite#283 I reported an unexpected error TS2742 when using the defineConfig function from ESLint. I reduced this test case to a clear TypeScript issue, which I’m reporting as requested in https://github.com/microsoft/TypeScript/issues/42873#issuecomment-2065572017.

This change makes the error disappear:

--- a/node_modules/eslint/node_modules/@eslint/config-helpers/index.d.ts
+++ b/node_modules/eslint/node_modules/@eslint/config-helpers/index.d.ts
@@ -1,2 +1,3 @@
-export type Config = import("@eslint/core").ConfigObject;
+import { ConfigObject as Config } from "@eslint/core";
+export { Config };
 export function defineConfig(): Config;

However, in the real @eslint/config-helpers package, the line export type Config = import("@eslint/core").ConfigObject is generated by tsc from JSDoc /** @typedef {import("@eslint/core").ConfigObject} Config */, and there doesn’t seem to be a way to generate an equivalent change from JSDoc.

In any case, such a change shouldn’t be necessary. TypeScript ought to recognize that export type Config = import("@eslint/core").ConfigObject is already sufficient to allow the defineConfig return type to be named.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

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.

Hướng nghiên cứu

Tái hiện trường hợp từ eslint.config.ts, node_modules/@eslint/config-helpers/index.d.ts và tsconfig.json với composite được bật. Điều tra cách trình biên dịch đặt tên cho kiểu mặc định được suy luận khi sử dụng bí danh Config đã import; hoàn tất khi ví dụ rút gọn báo cáo chẩn đoán TS2742 như mong đợi mà không yêu cầu thay đổi package.

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

Đánh giá

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

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.