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