microsoft / microsoft/TypeScript
NaN incorrectly narrows to 0
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ả
TypeScript Version: 3.9.0-dev.20200222
Search Terms: NaN Truthiness Falsy
Code
function bool(): boolean { return false; }
function number(): number { return NaN; }
let a = number();
let b = bool();
const x = a && b; // type = boolean | 0
console.log(x); // prints NaN (which is neither boolean, nor 0)
Expected behavior:
Type of x should be number | boolean.
Since NaN isn't a "unit type" like 0, we can't express NaN without using number.
Actual behavior:
Type of x is 0 | boolean.
Playground Link: playground link
Related Issues:
https://github.com/microsoft/TypeScript/issues/32778 (Incorrectly marked as duplicate?)
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
Tái hiện ví dụ trong TypeScript Playground được liên kết và so sánh kiểu được suy luận của a && b với giá trị runtime được báo cáo. Đọc issue liên quan #32778 và theo dõi truthiness narrowing của compiler đối với các giá trị number; được xem là hoàn thành khi NaN không bị thu hẹp thành 0 và kiểu mong đợi number | boolean được bao phủ bởi các bài kiểm thử hồi quy.
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
- 35/100