typescript - 修复没有不必要的泛型
问题描述
所以我只是尝试在 GitHub 上提出一个拉取请求,在那里我将泛型添加到方法调用中。该方法将其传递给一个接口,然后该接口确定其方法的返回类型。
现在 linter 开始抱怨:
ERROR: 65:105 no-unnecessary-generics Type parameter ResultT is used only once.
这是哪一行:
executeSql<ResultT = any>(sqlStatement: string, arguments?: any[]): Promise<[Transaction, ResultSet<ResultT>]>;
这是界面:
export interface ResultSetRowList<ResultT> {
length: number;
raw(): ResultT[];
item(index: number): ResultT;
}
所以我不认为这是一个no-unnecessary-generics
问题,或者是吗?
有拉取请求
解决方案
“没有不必要的泛型”发生在泛型参数仅使用一次时,例如
const foo = <T>(x: T) => ....
// as it is literally same as
const foo = (x: any) => ....
当泛型至少使用两次时
const foo = <T>(x: T): T => ....
它会起作用的。
我觉得这条规则是不必要的。将其关闭可能更明智,因为它看不到接口的“内部”来检查使用情况。因此,它可以将使用一次作为接口的通用参数视为误报。
该规则的主要思想是防止这种情况发生
const foo = <T extends SomeType>(x: T) => ...
因为它实际上和写作一样
const foo = (x: SomeType) => .... // and this is good practice
在这两种情况下,您都在分配继承/实现 SomeType 或 SomeType 的变量。在第一种情况下,您实际上选择了必须实现类型的泛型参数,然后使用泛型参数作为函数参数的类型,而在第二种情况下,您将类型直接用于函数的参数。
该问题的最佳解决方案是禁用该规则
编辑:如果您仍然想在保持代码的同时保留规则,请将代码放在/* tslint:disable:no-unnecessary-generics */
和/* tslint:enable:no-unnecessary-generics */
注释之间,因为它们会禁用它们之间的 linting 以针对指定的规则。更多关于 tslint 的规则标志:https ://palantir.github.io/tslint/usage/rule-flags/
推荐阅读
- html - 导航菜单推到页面的最右侧
- python - 避免在 CTRL+C 异步后回溯
- r - R编程,如何按字符串列按降序对数据框进行排序?
- c# - Discogs,使用 DiscordClient 访问 API
- python - 无法在 Ubuntu 服务器上构建 Dockerfile
- windows - 在 Windows 上更新 Tomcat WAR 文件
- python - 在 python 中从 html 中抓取文本,然后将文本保存在没有 \n 运算符的变量中
- visual-studio-code - 缺少运行在 Raspberry Pi 上的 VSCode 远程服务器所需的库版本
- pine-script - 如何引用过去柱的数据
- javascript - Javascript 在数据更新后立即运行功能?