【发布时间】:2020-03-25 11:15:25
【问题描述】:
// I get @typescript-eslint of [Unexpected any. Specify a different type.eslint(@typescript-eslint/no-explicit-any)]
const funcToGetOnlineData: (url: string) => any = () => {
// const httpData = (some processes to retrieve http request data)
// return httpData;
};
funcToGetOnlineData('http://getsomedata.com');
我知道将返回值转换为 any 不是一个好习惯。但是,有时我们确实需要这个。即通过 HTTP 请求获取形状未知的数据。在不禁用这些行的 ESlint 规则的情况下,是否有任何标准方法/实践来摆脱这种情况?
【问题讨论】:
-
为什么不改用
unknown类型呢? -
@CRice 因为使用
unknown的限制太多。例如1.Type 'unknown' is not assignable to type 'string'.ts(2322),2.Object is of type 'unknown'.ts(2571)。unknown类型太难操作,因为它不能分配给其他变量。 -
您能举个例子,为什么要保留
any类型来获取数据?在您的应用程序中转发any不是一个好主意。 Web API 层负责对获取的数据进行粗略的验证检查。如果它有效,你至少可以给它一个带有字符串索引签名、值类型或类似的通用对象类型。 -
@ford04 示例:我将从 REST API 获取数据,因为我不是 API 所有者,因此无法控制数据的形状。假设 API 会根据不同的请求参数响应不同的数据形状,我将根据 API 响应的内容将这些响应数据映射到我的自定义本地类型。在这种情况下,至少我需要先将响应数据转换为
any,然后再将其转换为我的本地类型。 -
@mannok 如果您之后将其转换为本地类型,您仍然应该使用 unknown。负责检查实际形状的函数可以使未知更具体。
标签: typescript casting eslint typescript-eslint