microsoft / microsoft/TypeScript
TS2742 “The inferred type of 'default' cannot be named” with ESLint `defineConfig`
Chưa có ai nhận issue này.
- 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
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- 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