angular - '() => Observable' türü, '() => Observable' türüne atanabilir değil


Typescript kullanarak bir ionic 2 uygulaması yapıyorum ve yerel typescript kurulumunu 2.1.0 sürümünden 2.2.1 sürümüne yükselttikten sonra bu hatayı almaya başladım:

Türü '() => Observable', tür '() => Observable' ile atanabilir değil. Bu isimle iki farklı tür mevcut, ancak bunlar birbirleriyle ilişkili değil. 'Observable' türü, 'Observable' türüne atanabilir değil. Bu isimle iki farklı tür mevcut, ancak bunlar birbirleriyle ilişkili değil.

Bu hata aşağıdaki her bir satır için tekrarlanır

L28:  this.onDisconnect = Network.onDisconnect
L29:  this.onchange = Network.onchange
L30:  this.ontypechange = Network.ontypechange

Network, ionic-native'den içe aktarılan bir sınıftır ve onDisconnect, onchange ve ontypechange metodları şu şekilde tanımlanmıştır:

static onDisconnect(): Observable<any>;
static onchange(): Observable<any>;
static ontypechange(): Observable<any>;

Benim onDisconnect, onchange ve ontypechange adlı @Injectable() sınıfı olan "Network" adlı özel bir sınıfımda public özelliklerim var ve bunları şu şekilde tanımladım:

L15:  public onDisconnect: ()=>Observable<any>
L16:  public ontypechange: ()=>Observable<any>
L17:  public onchange: ()=>Observable<any>

Üç sorum var mı?

İlk olarak: Biri, typescript'te hatanın gerçekten ne anlama geldiğini ve kodumda neden böyle oluştuğunu anlamama yardımcı olur mu?

İkincisi: Sınıfı genişletebileceğimi biliyorum, ama bunu yapmak istemiyorum. Bu yüzden soruyorum, benim yöntemlerimi public olarak bildirirken sınıftaki yöntemler static iken bu fark bu soruna sebep olur mu?

Üçüncü: Bir sınıfta bir özelliği tanımlamanın bu iki farklı yolu arasındaki fark nedir?

DÜZENLE :

Az önce daha önce Network sınıfını genişletmeyi denediğimi ve bunun statik bildirim nedeniyle başarısız olduğunu fark ettim

Cevap #1

node_modules ağacınızda iki farklı rxjs sürümü var ve TypeScript onların “aynı” olduğunu bilmiyor.

Denenecek ilk şey, tüm node_modules dizininizi temizlemek, npm önbelleğini boşaltmak ve npm install işlemini yeniden yapmaktır.

Eğer bu sorunu çözmezse, altta yatan sorun muhtemelen farklı bağımlılıkların uyumsuz rxjs sürümleri belirtmiş olmasıdır; bu durum npm'in bir veya daha fazla bağımlılık için ayrı bir rxjs sürümünü getirmesine zorlar (bunu node_modules dizini altında bir modülün içinde yerleştirecektir). Şöyle bir yapı göreceksiniz

node_modules
  dependencyA
  rxjs
  dependencyB
    node_modules
      rxjs

Eğer olan şey buysa, o zaman tek seçeneğiniz soruna yol açan sürüm gereksinimini bulmak olacaktır. Örneğin, en üst düzey package.json dosyası rxjs: "^5.2.0" içerebilirken, dependencyB/package.json dosyası rxjs: "5.0.0" içerebilir.

Cevap #2

Bu benim için işe yaradı:

import { Observable }'ı rxjs/observable'den import { Observable }'ı rxjs'den olarak değiştirmek;

İlgili makaleler