我不知道如何修复此打字稿错误。我试图使用ramda的groupBy函数:
245: const groups = R.groupBy((row: Record) => {
246: return row[this.props.groupBy]
247: })(this.props.data)
this.props.groupBy定义为:
groupBy?: {[K in keyof Record]}
data: Array<Record>
我得到的错误是:
Error:(245, 38) TS2345:Argument of type '(row: Record) => <T>(obj: any) => T' is not assignable to parameter of type '(a: Record) => string'.
Type '<T>(obj: any) => T' is not assignable to type 'string'.
Error:(246, 31) TS2683:'this' implicitly has type 'any' because it does not have a type annotation.
编辑:我决定不使用keyof类型,只是将它声明为groupBy作为字符串。我不认为这些是我真正的错误,但是intellij在更新错误消息方面遇到了麻烦,所以谁知道呢。他们现在已经离开了。
答案 0 :(得分:1)
您的问题有几个问题,修复使代码易于使用:
namespace X {
class Record {
Test: string;
Bla: string;
test: number;
}
class TT {
props: {
groupBy?: keyof Record,
data: Array<Record>
}
name() {
const groups = R.groupBy((row: Record) => {
return row[this.props.groupBy].toString();
})(this.props.data)
}
}
}
问题是:
groupBy
应该是keyof Record
而不是{[K in keyof Record]}
。第一个定义了一个类型,可以采用Record
属性的任何名称。您的版本定义了一种类型,其结构与Record
相同,但所有属性都为any。
groupBy
特别希望返回类型为字符串,而row
上的索引操作可以返回记录的任何类型的属性(示例中为ex string|number
上面)您应该.toString
将所有内容转换为字符串
注意:我使用标准编译器设置,您可能会在strict
时遇到其他错误,但由于不提及我认为标准的选项。我测试了TS 2.6.2,以及来自npm的Ramda的最新版本,其他版本的错误可能不同。
答案 1 :(得分:0)
使用ramda groupby
克服打字稿类型错误
您可以使用类型断言any
:
245: const groups = (R as any).groupBy((row: Record) => {
246: return row[this.props.groupBy]
247: })(this.props.data)