簡體   English   中英

在Angular 4中對HTTPClient請求進行類型檢查

[英]Typechecking HTTPClient request in Angular 4

我想知道如何在Angular 4中正確使用HTTP客戶端進行類型檢查。 https://angular.io/guide/http下的官方文檔說我應該像這樣做:

因此,我們有一個蛋糕:

 export interface Cake { numberOfCandles: number; diameter: number } 

和CakeService:

 @Injectable() export class CakeService { public getCake(cakeUrl: string): Observable<Cake> { return this.http.get<Cake>(cakeUrl); } } 

看起來很簡單。 因此,我編寫了一個測試以查看其工作方式:

 it('should get one cake', inject([CakeService, HttpTestingController], (http: CakeService, httpMock: HttpTestingController) => { http .getCake('testurl') .subscribe((data: Cake) => { expect(data.numberOfCandles).toBe('Test'); }); const req = httpMock.expectOne('testurl'); expect(req.request.method).toEqual('GET'); req.flush({ numberOfCandles: 'Test' }); httpMock.verify(); })); 

令我驚訝的是,測試通過了。 類型檢查是否應該捕獲發送的字符串而不是數字? 文檔中是否缺少我要執行的步驟? 在我看來,這不會在運行時進行類型檢查。 我怎樣才能做到這一點,這有意義嗎? 謝謝!

TypeScript是靜態鍵入的,以進行編譯。 編譯TypeScript后,它變成未類型化的常規JavaScript。 因此,在運行時,它不會基於不同的類型而失敗,因為它們都被視為“對象”類型。 現在,您可以執行某種鴨子檢查,以確保存在正確的屬性。 但是除此之外,運行時沒有更多內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM