21

I'm trying to fetch data from API using interface. Bellow is my temp interface

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

And below is my HTTP service, where there is a fn getHomedetails, which calls an 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"

    }

}

An interface doesn't get defined. I don't know what I'm doing wrong. And the above syntax is an angular 4.3X syntax. The editor which I've used are the sublime and visual studio.

1 Answer 1

37

This is because you're giving your class-level http a type of any:

Change http:any; to http: HttpClient

A good rule of thumb is to not use any unless you really really have to.

Sign up to request clarification or add additional context in comments.

5 Comments

it's interesting how similar this guideline is to .NET policy of do not use pointers unless you really really have to and if you do the compiler will force you to label your code as "unsafe" and change your project configuration to "allow unsafe code".
My code actually specifies HttpClient as the type of the variable, it's actually almost exactly the same as OPs code with that exception, so I'm at a loss, as I'm not using the "any" type for anything in the erroronous .ts file
Create a minimal reproduction in Stackblitz and the issue should be spottable.
I appreciate the diligence, but it turns out I was operating in a nested function and so the variable scopes were different. Fixed it by creating a utility function like nishil's pattern
I had same exact error but I am not using constructor based injection. I was using http = Inject(HttpClient). I had to change it to http = inject(HttpClient) instead to fix the error. Note the case, 'I' vs 'i'.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.