2017-01-14 45 views
7

Ben Bu benim ILogService uygulamasıtypescript ithal yanlış açısal

başarısız çünkü hangi angular den angular-mocks gelen açısal ithal değil
import * as angular from 'angular'; 

altında gibi sözdizimi kullanarak (daktilo) benim açısal 1 app açısal ithal am ./app/shared/Logger.factory.ts içinde

HATASI (38,7): hata TS2420: Sınıf 'Logger'ın' yanlış uygulayan arayüzü 'ILogService'. özelliğinin 'hata ayıklama' türleri uyumsuz. Tür '(... argüman: any []) => void', 'ILogCall' yazmak için atanamaz.

Hatta ben açısal tanımını açısal-alay gittiğiniz olsun vscode den 'angular' gitmek çalıştığınızda. Açılışa yönlendirilmeli ve kütüphaneye alay edilmemeli ...

Bu problem nasıl önlenir? typescript (hata yukarıda yapıştırılır) derleme sırasında

class Logger implements ng.ILogService { 
    info(message:string) { //some custom logic in info method} 
} 

angular.service('logger', Logger) 
+2

* çünkü bunların benim ILogService uygulaması * başarısız - hangi uygulama? Lütfen, sorunu çoğaltmak için gerekli olan tüm kodu sağlayın. Http://stackoverflow.com/help/mcve adresine bakın. Bu sonuç, nereden geldi - * Bu * açısal gelen açısal-mocks gelen açısal ithal değil? VS Kod sınıflar arasında geziniyor nasıl yolu gider nasıl tek yolu, başka bir şey etkiler. – estus

+0

Bak: https://stackoverflow.com/q/40664298/4110233. cevaplar o, bu tür Tamam çözümü hem arabirimleri – TheChetan

cevap

1

Bu neden oluyor yardımcı olacağını umuyoruz. Başka bir deyişle, gerçek ILogCall arayüzü olmalıdır: kodunuzu Yani

interface ILogCall { 
    (...args: any[]): void; //from @types\angular\index.d.ts 
    logs: string[]; //from @types\angular-mocks\index.d.ts 
} 

:

info(message:string) { //some custom logic in info method} 

(tüm üyeleri ile) doğru ILogCall nesneyi döndürmek gerekir. @TheChetan ve @Natarajan Nagarajugari 'nin cevabı yararlı olabilir, ancak sizin TypeScript yazı birimi testlerinizi kırıp kırmayacağından emin değilim. (: String mesaj):

Çözümümün bilgilerinde ise

info(message:string) 
{ 
    var logCall: any = (...args: any[]) => {}; 
    logCall.logs = //something; 

    return logCall as ng.ILogCall; 
} 
+0

çalışacaktır neden olarak bu cevabı açıklayabilir eğer yararlı olacaktır –

+0

uygulamaya öneriyorsun yanılmıyorsam eğer öyleyse –

1

deneyin hata veriyor hangi özel servis Aşağıda DÜZENLEME

Ben uygulanması uygulanması olduğunu bu .. ( ).o açısal-mock en yazarak açısal giden tarihiyle bir büyütme olduğu için

+1

burada, ama bir yolu nerede olduğunu Açısal-atastan tanımların yüklenmesini devre dışı bırakabilirim –