为什么angular 4.3中的httpclient返回对象而不是任何对象?

为什么angular 4.3中的httpclient返回对象而不是任何对象?,angular,typescript,Angular,Typescript,Angular 4.3中的新HttpClient类在默认情况下似乎返回对象,而不是任何 鉴于typescript文档中的说明,是否有这样做的特殊原因: 永远不要使用数字、字符串、布尔值或对象类型。这些 类型指的是几乎从未使用过的非基本装箱对象 适当地使用JavaScript代码 我知道我可以使用:提供我自己的退货类型 this.httpService.get('/api1').subscribe(数据=>{console.log(Data.Value1)}) 将其设为默认值似乎更容易。我知道我

Angular 4.3中的新HttpClient类在默认情况下似乎返回对象,而不是任何

鉴于typescript文档中的说明,是否有这样做的特殊原因:

永远不要使用数字、字符串、布尔值或对象类型。这些 类型指的是几乎从未使用过的非基本装箱对象 适当地使用JavaScript代码

我知道我可以使用:
提供我自己的退货类型
this.httpService.get('/api1').subscribe(数据=>{console.log(Data.Value1)})

将其设为默认值似乎更容易。我知道我可以为它返回的数据创建一个特定的类型,但是使用any似乎会使它更灵活


我本来打算扩展HttpClient并重写返回any的方法,但在我这么做之前,我想看看我是否遗漏了什么。

免责声明:各种返回类型都有很多可用的重载,因此我可能会对此进行更多的研究

我还没有看到任何具体的支持,但我的猜测是,它因为
对象
更准确地描述了类型,因为它比
任何
更严格,并且“本机”与通用javascript对象方法关联(请参阅)。至少在我的粗略估计中,这似乎符合默认情况下返回响应体(假定为JSON)的更改

查看此问题,了解对象与任何对象的更深入比较:

这里还有一篇Alligator.io关于HttpClient的精彩文章:

TLDR:

…一个主要区别是默认情况下需要JSON响应,因此不再需要显式解析JSON响应

[为简洁起见,删除了中间的文本]

默认情况下,HttpClient返回响应的主体

[删除更多文本]

如果您希望响应不是JSON,那么可以使用带有responseType键的对象指定预期的响应类型

我真的建议您阅读整篇文章。

在JavaScript代码中几乎从未正确使用过的非原始装箱对象中的关键字是几乎

如中所述,JSON文档可以是除
未定义的
和符号之外的任何类型,这使得
对象
任何
更合适

any
对象的行为解释如下:

any类型是使用现有JavaScript的一种强大方式,允许您在编译期间逐步选择加入和退出类型检查。您可能期望对象扮演类似的角色,就像在其他语言中一样。但是Object类型的变量只允许你给它们赋值——你不能对它们调用任意方法,即使是那些实际存在的方法

任何
响应类型都允许对其调用任意方法,这不是一种理想的行为,包括不存在的行为

JSON响应的合适类型是

any[] | object | boolean | number | string | null
精确的(如图所示,添加了
null
)为:

type JSONValue=boolean | number | string | null | JSONObject | JSONArray;
接口JSONObject{
[x:string]:JSONValue;
}
接口JSONArray扩展数组{}

这可能是在HttpClient中应该采用的方式。虽然
对象
不如
任何类型

准确,但仍然更适用,我是否遗漏了什么?文档中没有提到对象,我想答案就在你的问题中:>这些类型指的是在JavaScript代码中几乎从未正确使用过的非原始装箱对象。>其余的对我来说似乎有点夸张。@HarryNinh,你是对的,文档似乎暗示它返回一个any。但当我实际使用它时,json结果会映射到一个对象。
type JSONValue = boolean | number | string | null | JSONObject | JSONArray;

interface JSONObject {
    [x: string]: JSONValue;
}

interface JSONArray extends Array<JSONValue> { }