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并覆盖返回任何方法,但在我这样做之前,我想看看是否有我遗漏的东西.
在 JavaScript 代码中几乎从未正确使用的非原始装箱对象中的关键字是mostly。
\n\n正如这个答案中所解释的,JSON 文档可以是除了undefined
和 符号之外的任何东西,这使得Object
比any
.
手册中解释了any
vs的行为:Object
\n\n\nAny 类型是使用现有 JavaScript 的强大方式,允许您在编译期间逐渐选择加入和退出类型检查。您可能期望 Object 扮演类似的角色,就像在其他语言中一样。但是 Object 类型的变量只允许您为它们分配任何值 - 您可以\xe2\x80\x99t 对它们调用任意方法,甚至是实际存在的方法
\n
any
响应类型允许对其调用任意方法,这不是理想的行为,包括那些不存在的方法。
JSON 响应的合适类型是
\n\nany[] | object | boolean | number | string | null\n
Run Code Online (Sandbox Code Playgroud)\n\n精确的一个(如此处所示,加上null
)是:
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
。
归档时间: |
|
查看次数: |
4586 次 |
最近记录: |