Có thể xác định thủ công các phương thức bổ sung cho một lớp hiện có không?Flowtype: mở rộng động các lớp học
usecase cụ thể của tôi là bluebird của promisifyAll()
đó:
Promisifies toàn bộ đối tượng bằng cách đi qua thuộc tính của đối tượng và tạo ra một tương đương async của mỗi chức năng trên đối tượng và chuỗi nguyên mẫu của nó ... http://bluebirdjs.com/docs/api/promise.promisifyall.html
Rõ ràng, luồng sẽ không thể tự động tìm ra điều này. Vì vậy, tôi sẵn sàng giúp đỡ. Câu hỏi là CÁCH?
Xét đoạn mã sau
import http from 'http'
import { promisifyAll } from 'bluebird'
promisifyAll(http)
const server = http.createServer(() => { console.log('request is in'); })
server.listenAsync(8080).then(() => {
console.log('Server is ready to handle connections')
})
dòng chảy mang đến cho các lỗi sau đây:
property `listenAsync`. Property not found in
Server
Sẽ không có bất kỳ lỗi nếu tôi sử dụng listen
. dòng chảy đủ thông minh để thấy rằng đây là một phương pháp thực được định nghĩa trong một mô-đun. Nhưng listenAsync
là một bổ sung động bởi promisifyAll
và không thể nhìn thấy được
cảm ơn. cái này không hoàn hảo, vì nó đòi hỏi sự thay đổi mã. thay đổi nhỏ, nhưng vẫn còn. và nó có nghĩa là mã sẽ phải được thay đổi cho các trường hợp động khác nữa. Tôi hiểu "sẽ không thực sự an toàn" một phần, nhưng nó không thực tế như trong cả hai trường hợp trình biên dịch không thể suy ra dữ liệu từ mã và tin tưởng tôi để viết định nghĩa chính xác. – JimiDini
nói chung không thể diễn tả một số mẫu động trong luồng. Bạn phải cô lập các phần quá động từ luồng và cung cấp các khai báo thích hợp cho các phần đã nhập – vkurchatkin
Nó sẽ làm giảm đường cong đáng kể nếu luồng có cơ chế làm những việc như mở rộng mẫu thử theo cách "không an toàn". Ví dụ, nếu tôi sử dụng một thư viện như should.js hoặc chai, tôi sẽ có thể tạo ra một giao diện trong libs mở rộng prototype của Object với hàm 'should'. Nếu điều này không thể thực hiện theo kiểu an toàn, cho phép người tiêu dùng vô hiệu hóa phân tích tĩnh trên các đường dẫn mã sử dụng nó thay vì ném lỗi. – cchamberlain