Typescript 修正不必要的泛型

Typescript 修正不必要的泛型,typescript,generics,tslint,Typescript,Generics,Tslint,所以我只是尝试在GitHub上发出一个pull请求,在那里我向方法调用添加了泛型。方法将其传递给接口,然后接口确定其方法的返回类型 现在,门楣匠开始抱怨: ERROR: 65:105 no-unnecessary-generics Type parameter ResultT is used only once. 这是哪一行: executeSql<ResultT = any>(sqlStatement: string, arguments?: any[]): Promise&

所以我只是尝试在GitHub上发出一个pull请求,在那里我向方法调用添加了泛型。方法将其传递给接口,然后接口确定其方法的返回类型

现在,门楣匠开始抱怨:

ERROR: 65:105  no-unnecessary-generics  Type parameter ResultT is used only once.
这是哪一行:

executeSql<ResultT = any>(sqlStatement: string, arguments?: any[]): Promise<[Transaction, ResultSet<ResultT>]>;
executeSql(sqlStatement:string,arguments?:any[]):Promise;
以下是界面:

export interface ResultSetRowList<ResultT> {
    length: number;
    raw(): ResultT[];
    item(index: number): ResultT;
}
导出接口结果列表{
长度:数字;
raw():ResultT[];
项目(索引:编号):结果;
}
所以我不认为这是一个
没有不必要的泛型的问题,或者是吗

当一个泛型参数只使用一次时,“没有不必要的泛型”就会发生

const foo = <T>(x: T) => ....
// as it is literally same as
const foo = (x: any) => ....
在这两种情况下,您都在分配继承/实现SomeType或is SomeType的变量。在第一种情况下,您实际上选择了必须实现该类型的泛型参数,然后将泛型参数用作函数参数的类型,而在第二种情况下,您将类型直接用于函数参数

问题的最佳解决方案是禁用规则


编辑:如果您仍希望在保留代码的同时保持规则处于打开状态,请将代码放置在
/*tslint:disable:无不必要的泛型*/
/*tslint:enable:无不必要的泛型*/
注释之间,因为它们为指定的规则禁用了它们之间的换行。关于tslint规则标志的更多信息:

为什么要精确定义
resultstrowlist
?因为这是一个数据库查询,最好告诉typescript返回结构是什么。我无法控制它。我向
防御类型
repo@Elias那我提到的评论呢?啊,对,我不认为我应该这样做?这是我第一次参加外部会议library@Elias无论是从接口中删除泛型参数还是从接口中删除泛型参数,都没有其他选项像这样的签名从根本上是不正确的,这就是规则存在的原因。具有这种签名的函数不可能正确实现。可能返回任何内容的函数的正确返回类型是未知的,函数的使用者必须测试或断言返回值的类型,以安全地缩小返回值的范围。在DefinitelyTyped上,禁用或忽略该规则的PRs将被拒绝。
const foo = <T>(x: T): T => ....
const foo = <T extends SomeType>(x: T) => ...
const foo = (x: SomeType) => .... // and this is good practice