通过方括号访问泛型类型



我有以下类:

export abstract class BasicTable<T> {
rows: T[];
...
}

其中T是表行的类型。

为了过滤行,我有以下实现:

private filter(data: T[]): T[] {
const activeFilters = FilterService.getFilters();

if(activeFilters.length) {
return data.filter(row => {
activeFilters.map(filter => this.matchesFilter(row, filter))
.filter(matches => !matches)
.length > 0 ? false : true
});
}
else {
return data;
}
}
private matchesFilter(row: T, filter: Filter): boolean {
return (row[filter.field] === filter.value); // I have kept it simple in this SO-question
}

但是对于matchesFilter()方法中的row[filter.field],我得到以下错误:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'unknown'.
No index signature with a parameter of type 'string' was found on type 'unknown'.

如何修复此错误?

索引可能需要是T的keyof类型。你可以用把它投射到T键

return (row[filter.field as keyof T] === filter.value);

示例

最新更新