microsoft / microsoft/TypeScript
Type inference regression on function calls not saved to variables, due to #61668
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
61668 inference overload regression tuple
🕗 Version & Regression Information
- This changed in commit or PR #61668
⏯ Playground Link
💻 Code
declare function getNum(): Promise<number>;
declare function getStr(): Promise<string>;
declare function useTuple(tuple: [number, string]): void;
const p = Promise.resolve([]).then(() => Promise.all([getNum(), getStr()])).then(useTuple);
🙁 Actual behavior
The Promise.all infers to Promise<(number|string)[]>.
🙂 Expected behavior
The Promise.all should infer Promise<[number, string]>.
Additional information about the issue
This only happens when the Promise.all call is directly returned. If I instead write
const p = Promise.all([getNum(), getStr()]);
return p;
then it infers the tuple correctly again, even without doing anything that would suggest it should infer the type differently.
This PR also impacted inference of enums: in another example, I pass {mode: new Subject(Mode.A)} into a function that fails because it infers Subject<Mode.A> while if I save a temporary const mode = new Subject(Mode.A); then it infers Subject<Mode> and passes.
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 được liên kết trong TypeScript Playground và so sánh thay đổi về suy luận được giới thiệu bởi PR #61668. Truy vết đường dẫn trả về trực tiếp cho Promise.all và trường hợp tương phản sử dụng biến tạm thời, sau đó kiểm tra ví dụ enum như một hồi quy thứ hai. Công việc được xem là hoàn tất khi cả hai ví dụ đều suy luận các kiểu tuple và enum như mô tả mà không làm hồi quy hành vi hiện có.
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
- 42/100