Typescript:具有通用语法的调用函数

时间:2018-01-30 02:30:01

标签: typescript generics

getData(): Observable<A | B> {
  return this.http.get<A | B>(this.requestURL, {});
}

如果我删除<A | B>方法旁边的get语法,tslint会发出错误说:You can't bind Object to A or B所以,我最后添加语法而不了解发生了什么用语法。我在Typescript中查找Generics,语法似乎用于捕获用户提供的类型。令我困惑的是,根据我目前正在使用的Angular 5中的get模块中的http方法的源代码,get方法声明不使用{{1} }(get method source code)。此外,如果由于类型而发生错误,generics会不正确?

总结一下,如果return <Observable<A | B>>this.http.get(this.requestURL, {})方法不使用类型信息Generics,则在调用类似get<T>()的函数时使用get语法的意义/目的是什么?在其声明部分?

任何见解都将受到赞赏!

1 个答案:

答案 0 :(得分:1)

您找到了已弃用的Http模块(@angular/http)的来源。您正在使用新模块@angular/common/http),该模块具有通用get method

在没有定义any的方法上使用泛型参数是编译错误,它没有任何意义。

对于get方法,type参数用于键入响应。不指定类型参数本身就是一个错误,无法通过强制转换解决(强制转换<Observable<A | B>>this.http.get(this.requestURL, {})无效,因为编译错误已由get的调用触发,而 //This function will try to load an image and fire callbacks on the availablity. //Images are automatically cached at this point (bonus) function testImage(url) { var tester=new Image(); tester.onload=imageFound; tester.onerror=imageNotFound; tester.src=url; } function imageFound() { loadNext(); //Try the next one } function imageNotFound() { //Last image loading failed. Proceed showing images you have got. console.log('Last Index: ' + lastIndex - 1;); //showImages(); } function loadNext(){ testImage('http://localhost/mebresim/' + data.attributes.kampus_id + '_' + lastIndex); lastIndex++; } //Trigger image loading var lastIndex = 0; loadNext(); 缺少类型参数)