为什么httpclient在angular 4.3中返回Object而不是任何?

Lam*_*lan 10 typescript angular

Angular 4.3中的新HttpClient类似乎默认返回Object而不是any.

有没有特别的理由这样做,因为打字稿文件说:

不要使用Number,String,Boolean或Object类型.这些类型指的是在JavaScript代码中几乎从不使用的非原始盒装对象.

https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html

我知道我可以使用以下方法提供自己的返回类型:
this.httpService.get<any>('/api1').subscribe(Data => {console.log(Data.Value1)});

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

我打算扩展HttpClient并覆盖返回任何方法,但在我这样做之前,我想看看是否有我遗漏的东西.

Est*_*ask 4

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

\n\n

正如这个答案中所解释的,JSON 文档可以是除了undefined和 符号之外的任何东西,这使得Objectany.

\n\n

手册中解释了anyvs的行为:Object

\n\n
\n

Any 类型是使用现有 JavaScript 的强大方式,允许您在编译期间逐渐选择加入和退出类型检查。您可能期望 Object 扮演类似的角色,就像在其他语言中一样。但是 Object 类型的变量只允许您为它们分配任何值 - 您可以\xe2\x80\x99t 对它们调用任意方法,甚至是实际存在的方法

\n
\n\n

any响应类型允许对其调用任意方法,这不是理想的行为,包括那些不存在的方法。

\n\n

JSON 响应的合适类型是

\n\n
any[] | object | boolean | number | string | null\n
Run Code Online (Sandbox Code Playgroud)\n\n

精确的一个(如此处所示加上null)是:

\n\n
type JSONValue = boolean | number | string | null | JSONObject | JSONArray;\n\ninterface JSONObject {\n    [x: string]: JSONValue;\n}\n\ninterface JSONArray extends Array<JSONValue> { }\n
Run Code Online (Sandbox Code Playgroud)\n\n

这可能是在 HttpClient 中应该完成的方式。虽然Object不太准确但仍然比 更适用的类型any

\n