microsoft / microsoft/TypeScript
Generic Tuple Optional Parameter spread errors with Type instantiation is excessively deep and possibly infinite. ts(2589)
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.4k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 117
Mô tả
Bug Report
type StringableParameters<TArgs>
= TArgs extends [optionalHead?:(infer OptionalArg), ...optionalRest:infer OptionalRest] //optionalHead? <- this question mark is what's causing error
? [(OptionalArg|string)?, ...StringableParameters<OptionalRest>] //ts(2589)
: []
type Test = StringableParameters<[1,2?,3?]>
// type Test = [(string | 1)?, (string | 2)?, (string | 3)?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, any?, ...any[]]
That question mark TArgs extends [optionalHead?:(infer OptionalArg) allowing parameters to be optional is leading to the infinite nesting with ts2589 error. If I remove that question mark - it compiles, but omit the optional parameters of the tuple
type StringableParameters<TArgs> = TArgs extends [optionalHead:(infer OptionalArg), ...optionalRest:infer OptionalRest]
? [(OptionalArg|string), ...StringableParameters<OptionalRest>]
: []
type Test = StringableParameters<[1, 2?, 3?]>
//type Test = [string | 1] - optional parameters omitted
🔎 Search Terms
Type instantiation is excessively deep and possibly infinite. ts(2589)
Generic Tuple extends Optional argument
🕗 Version & Regression Information
Typescript v5, v4.7.4,...
⏯ Playground Link
Playground link with relevant code
💻 Code
type StringableParameters<TArgs>
= TArgs extends [optionalHead?:(infer OptionalArg), ...optionalRest:infer OptionalRest] //optionalHead? <- this question mark is what's causing error
? [(OptionalArg|string)?, ...StringableParameters<OptionalRest>] //ts(2589)
: []
type TestOptional = StringableParameters<[1,2?,3?]>
/* type TestOptional = [(string | 1 | undefined)?, (string | 2 | undefined)?, (string | 3 | undefined)?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?,
unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?,
unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?,
unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, unknown?, ... 6 more ...?, any?]
*/
type StringableParametersNoOptional<TArgs>
= TArgs extends [optionalHead:(infer OptionalArg), ...optionalRest:infer OptionalRest] //optionalHead? <- this question mark is what's causing error
? [(OptionalArg|string), ...StringableParametersNoOptional<OptionalRest>] //ts(2589)
: []
type TestNoOptional = StringableParametersNoOptional<[1,2?,3?]>
//type TestNoOptional = [string | 1]
🙁 Actual behavior
Type instantiation is excessively deep and possibly infinite.(2589) and if I use ts-ignore, the TestOptional type has excessive amount of unknown optional parameters on the tail
🙂 Expected behavior
type TestOptional = [(string | 1 | undefined)?, (string | 2 | undefined)?, (string | 3 | undefined)?]
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
Bắt đầu với bản tái hiện TypeScript Playground được liên kết và so sánh các kiểu tuple conditional optional và non-optional được nêu trong issue. Điều tra lý do optional spread đệ quy vào quá nhiều tham số unknown; hoàn tất khi tuple optional gồm ba phần tử như mong đợi được tạo ra mà không có ts(2589).
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
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100