未定义类型的函数调用可能不接受类型参数 - Angular 5 http 调用

18

我正在尝试使用接口从API获取数据。以下是我的临时接口:

export interface ITemp {
    id: number,
    name: string,
    age:  number
}

以下是我的HTTP服务,其中有一个名为getHomedetails的函数,它调用了一个API。

import {Injectable} from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { ITemp } from "../interfaces/temp";
import { Observable } from "rxjs/Observable";
import 'rxjs/Rx';

@Injectable()
export class HttpService{

    http:any;
    baseUrl: String;

    constructor(http:HttpClient){
        this.http = http;
        this.baseUrl = 'some_url';
    }

    getHomeDetails(): Observable<ITemp>  {
        return this.http.get<ITemp>(this.baseUrl); //problem is here 
        //when mouse is pointed on get<ITemp> it shows "Untyped function calls may not accept type arguments"

    }

}

接口没有被定义。我不知道我做错了什么。上面的语法是 Angular 4.3X 的语法。我使用过的编辑器是 Sublime 和 Visual Studio。

1个回答

31

这是因为你给类级别的 http 变量赋予了 any 类型:

http:any; 改为 http: HttpClient

一个好的经验法则是,除非你确实必须这样做,否则不要使用 any


有趣的是,这个指南与.NET政策非常相似,即除非你确实需要使用指针,否则不要使用它们,如果你使用了指针,编译器将强制你将代码标记为“不安全”,并更改项目配置以“允许不安全的代码”。 - fartwhif
我的代码实际上将HttpClient指定为变量的类型,除此之外,它与OP的代码几乎完全相同,所以我很困惑,因为在有错误的.ts文件中我没有使用“any”类型。 - fartwhif
1
在 Stackblitz 中创建一个最小的可复现示例,问题应该很容易被发现。 - UncleDave
我很感激你的勤奋,但事实证明我正在嵌套函数中操作,因此变量作用域是不同的。通过创建像nishil模式一样的实用程序函数来解决了这个问题。 - fartwhif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接