Mevcut bir sınıf için ek yöntemleri manuel olarak tanımlamak mümkün mü?Flowtype: dinamik olarak uzanan sınıflar
Benim spesifik usecase olan mavi kuş en promisifyAll()
hangi:
Promisifies nesnenin özelliklerini geçmekte ve nesne ve prototip zincirinde her fonksiyonun bir zaman uyumsuz eşdeğer oluşturarak tüm nesneyi ... http://bluebirdjs.com/docs/api/promise.promisifyall.html
Açıkçası, akış bunu otomatik olarak çözemeyecekti. Yani, yardım etmeye hazırım. Soru NASIL? Ben listen
kullanılırsa
property `listenAsync`. Property not found in
Server
herhangi bir hata söz konusu olmaz:
Akış burada aşağıdaki hatayı veriyor aşağıdaki kodu
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üşünün. akış, bunun bir modülde tanımlanan gerçek bir yöntem olduğunu görecek kadar akıllıdır. Ancak listenAsync
, promisifyAll
tarafından dinamik bir eklentidir ve
teşekkürler. Bu kod değişikliği gerektirdiğinden, mükemmel değildir. küçük değişiklik, ama yine de. ve diğer dinamik durumlar için kodun da değiştirilmesi gerektiği anlamına gelir. "Gerçekten güvende olmaz" bölümünü anlıyorum, ancak her iki durumda da derleyici koddan veri çıkarıp doğru tanımı yazmam için bana güvenir. – JimiDini
genel olarak akıştaki bazı dinamik modelleri ifade etmek mümkün değildir. Akıştan çok fazla dinamik parça ayırmak ve yazılan parçalar için uygun beyanlar vermek zorundasınız. – vkurchatkin
Akış, prototip uzantısı gibi şeyleri "güvenli olmayan" bir şekilde yapmak için bir mekanizmaya sahip olsaydı, eğriyi önemli ölçüde azaltacaktır. Mesela, should.js veya chai gibi bir kütüphane kullanırsam, lib'lerde Object'in prototipini 'should' fonksiyonuyla genişleten bir arayüz oluşturabilmem gerekir. Bu güvenli bir şekilde yapılamazsa, tüketicinin hataları atmak yerine onu kullanan kod yollarındaki statik analizi devre dışı bırakmasına izin verin. – cchamberlain