microsoft / microsoft/TypeScript
String literal type inconsistency in overload resolution
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ả
As far as I see, the TS compiler still sees a string literal type of a single literal as an old style "string parameter" thing. I thought that the concept of string literal types should replace overloading on string parameters, but seems that it doesn't.
That complicates things, and results in a "strange" behaviour in overload resolution:
class A256 {
m(a): any;
m(a: "a" | "b"): string;
m(a: "c"): string;
m(a): any {}
}
var foo1 = new A256().m("a"); // 'any'
var foo2 = new A256().m("c"); // 'string'
What should be the correct logic with string literal types in overload resolution?
Shouldn't overloads with unions of literals precede the others as well, when resolving overloads?
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 bằng cách biên dịch ví dụ A256 và so sánh các kiểu được suy luận của foo1 và foo2 với hành vi overload mong đợi. Sau đó, truy vết cách trình biên dịch xử lý việc phân giải overload cho các union của string literal; công việc được coi là hoàn tất khi hành vi đã được định nghĩa và ví dụ được phân giải nhất quán theo quy tắc đó, đồng thời bổ sung độ bao phủ hồi quy nếu xác định được vị trí kiểm thử liên quan.
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ó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- 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
- 25/100