相关疑难解决方法(0)

'对象'类型上不存在属性'json'

我正在尝试使用角度为2的HttpClient通过REST获取数据.我在这里按照角度教程https://angular.io/tutorial/toh-pt6并在英雄和HTTP部分下你会看到这段代码用于通过http获取英雄数据.

getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
         .toPromise()
         .then(response => response.json().data as Hero[])
         .catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)

以下是我在我的应用程序中编写的类似版本

fetch(startIndex: number, limit: number): Promise<Order[]> {
    let url = this.baseUrl + "&startIndex=" + startIndex + "&limit=" + limit;

    return this.http.get(url)
                .toPromise()
                .then(response => response.json().results as Order[])
                .catch(this.handleError);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用InteliJ Idea,并且在调用response.json()时有一条红线,即使我尝试使用ng build构建,我也会收到错误.

属性'json'在'Object'类型上不存在.

您可能会注意到,而不是json().datajson().results.这是因为根据教程,服务器响应了一个具有data字段的对象,但我自己的服务器使用具有results字段的对象进行响应.如果您向下滚动教程,您会看到这一点.

请注意服务器返回的数据的形状.此特定的内存中Web API示例返回具有data属性的对象.您的API可能会返回其他内容.调整代码以匹配您的Web API.

为了解决这个问题,我试过这样的事情

(response: Response) => response.json().results as Order[]
Run Code Online (Sandbox Code Playgroud)

当我这样做时,.json()方法已被解决,但另一个错误弹出

Promise类型不存在属性结果

我尝试通过定义一个接口来修复它

interface OrderResponse {
    orders: Order[]; …
Run Code Online (Sandbox Code Playgroud)

typescript angular angular-httpclient

34
推荐指数
2
解决办法
8万
查看次数

TypeScript真的是JavaScript的超集吗?

我刚开始使用TypeScript,有时会遇到编译器错误"使用未声明的变量".例如,以下适用于纯JavaScript:

var foo = {};
foo.bar = 42;
Run Code Online (Sandbox Code Playgroud)

如果我尝试在TypeScript中执行相同的操作,它将无法正常工作并向我提供上述错误.我必须这样写:

var foo :any = {};
foo.bar = 42;
Run Code Online (Sandbox Code Playgroud)

在纯JavaScript中,带有any的类型定义既不是必需的也不是有效的,但在TypeScript中,这似乎是强制性的.我理解错误及其原因,但我总是在视频中听到并阅读文档:

typescriptlang.org:

"TypeScript是JavaScript的类型超集[...]"

简介视频@minute 3:20:

"所有JavaScript代码都是TypeScript代码,只需复制和粘贴"

这是在TypeScript开发过程中发生了变化,还是必须传递特定的编译器设置才能使其工作?

javascript compiler-errors typescript1.4

22
推荐指数
4
解决办法
5640
查看次数