generics - Các tham số kiểu promise có được kiểm tra trong TypeScript không?
Tại sao ví dụ sau không tạo ra cảnh báo của trình biên dịch TypeScript (thay vào đó gặp lỗi khi chạy) khi tôi cố gắng làm việc với foo như Promise<string>?
let foo: Promise<string> = Promise.resolve(10); // should not compile
foo.then(v => v.toUpperCase());
// -> TypeError: v.toUpperCase is not a function
Chỉ khi tôi đặt Promise.resolve<string>(10) thì tôi mới nhận được lỗi, nhưng điều đó không nên là bắt buộc vì trình biên dịch TypeScript đủ thông minh để suy đoán kiểu của RHS là Promise<number> khi kiểm tra. Vậy tại sao nó không cảnh báo tôi khi tôi cố gắng thực hiện phép gán này? Ngoài việc chỉ định kiểu rõ ràng, có cách nào khác để giải quyết vấn đề này không? Tôi đang sử dụng TypeScript 2.0.9.
Câu trả lời #1
Điều này dường như là một vấn đề đã biết (cũng xem #10524, đây là vấn đề chính để theo dõi cho vấn đề này) và sẽ được sửa trong v2.1.2 bởi cam kết được liên kết. Bạn nên có thể nâng cấp và các loại sau đó sẽ được thực thi đúng cách, như dự định.
Nếu vấn đề vẫn tiếp diễn trong v2.1.x, gợi ý của tôi là báo cáo lỗi trên trình theo dõi sự cố của họ.