microsoft / microsoft/TypeScript
Generic function passed to generic function inferred correctly only with spread
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ả
🔎 Search Terms
generic function spread regression inference
🕗 Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about generics
⏯ Playground Link
💻 Code
export type Node = { };
declare function fooooooo<T, Result extends ArrayLike<unknown>, Evil extends readonly unknown[]>(
input: T,
callback: (input: T, prev: Result, ...evil: Evil) => Result,
): Result
declare function baaaaaar<T, Result extends ArrayLike<unknown>>(
input: T,
callback: (input: T, prev: Result) => Result,
): Result
declare function callback<T>(
input: T,
prev: string[],
): string[];
export function example<T>(input: T) {
// Infers type parameter Result correctly
fooooooo(input, callback);
// ^? function fooooooo<T, string[], []>(input: T…
// Fails to infer type parameter Result correctly instead infers the constraint
baaaaaar(input, callback);
// ^? function baaaaaar<T, ArrayLike<unknown>>(in…
// Bypassing inference, the function call is correct
baaaaaar<T, string[]>(input, callback);
// Infers type parameter Result correctly
baaaaaar(input, callback<T>);
// ^? function baaaaaar<T, string[]>(input: T, ca…
}
🙁 Actual behavior
baaaaaar(input, callback) infers the constraint of Result = ArrayLike<unknown>
🙂 Expected behavior
baaaaaar(input, callback) should infer Result = string[] from the return type or parameter of callback.
Additional information about the issue
No response
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 reproducer được liên kết trong TypeScript Playground và so sánh các kiểu được suy luận cho hai lời gọi generic. Theo dõi cách kiểu trả về và các tham số của callback góp phần suy luận Result. Hoàn thành khi baaaaaar(input, callback) suy luận Result là string[] mà không cần các đối số kiểu tường minh hoặc chuyên biệt hóa callback.
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
- Đặc tả rõ ràng
- Mức phù hợp với người mới
- 45/100