microsoft / microsoft/TypeScript

String literal type inconsistency in overload resolution

Đang mở
#9,443 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

In Discussion Suggestion
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

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. 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

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.