当响应不匹配时,角度可观察的界面不会导致任何错误

时间:2019-11-19 10:39:46

标签: angular

在角度上,我正在定义一个接口,并将其与服务中的可观察对象一起使用,但是当即将到来的响应不同于该接口时,它不会给出任何错误

接口

export interface Quote {
    abc: string;
}

服务

import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import { Quote } from './Quote';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable()
export class First {
    constructor(private http: HttpClient) { }
    getFirst() {
        return this.http.get<Quote>('https://programming-quotes-api.herokuapp.com/quotes/id/5a6ce86f2af929789500e824')

    }
    handleError(err: HttpErrorResponse) {
        console.log('here' + err.message);
        return Observable.throw(err.message + 'ssaa');
    }
}

使用该服务的组件

import { Component, Input, OnChanges, SimpleChanges, OnInit } from "@angular/core";
import { First } from './first.service';
import { Quote } from '@angular/compiler';
@Component({
  templateUrl: "Number.component.html",
  styleUrls: ["Number.component.css"],
  selector: "Number",
  providers: [First]
})
export class NumberComponent implements OnInit {
  constructor(private first: First) { }
  ngOnChanges(changes: SimpleChanges): void {
    for (let property in changes) {
      console.log(`${property} ${changes[property].currentValue} ${changes[property].previousValue}`)
    }
  }
  ngOnInit() {
    this.first.getFirst().subscribe((result) => console.log(result));

  }
  @Input('ab')
  numberIn: number = 1;

}

所以我的问题是,鉴于即将到来的响应处于这种状态,一切都将如何正常工作

{_id: "5a6ce86f2af929789500e824", sr: "Jedan od mojih najproduktivnijih dana je bio kada sam bacio 1000 linija koda.", en: "One of my most productive days was throwing away 1,000 lines of code.", author: "Ken Thompson", source: "", …}

1 个答案:

答案 0 :(得分:2)

有几个原因导致如果不满足该界面就不会出现任何错误。

第一个是在编译时期间,编译器不知道,也不知道您的API响应到底是什么样子。在此期间,您永远不会与API进行交互。

由于浏览器不了解TypeScript,因此必须将其编译为JavaScript。由于JavaScript是untyped language,因此您之前声明的所有键入将在编译过程中消失。这也消除了在运行时期间抛出输入错误的可能性。

拥有一个很酷的功能,但是现在您有责任保持API接口为最新。