我有一个util,它接受一个数组和一个谓词来执行数组的过滤,但是在对谓词使用我的自定义类型之后,我得到了一个错误声明
属性'name‘在类型'T’上不存在
我认为泛型属性类型T会接受任何东西吗?
我漏掉了什么明显的东西吗?
Array.ts
export type arrayPredicate = <T>(arg: T) => boolean;ArrayUtil
static filterArray<T>(array: T[], arrayPred: arrayPredicate): T {
const key = Object.keys(array).find(obj => arrayPred(array[obj]));
return array[key];
}在测试中的使用
const array = [
{
'name': 'object-1',
'id': 1
},
{
'name': 'object-2',
'id': 2
}
];
it(... , () => {
// I get red squigglies under '.name'
const myObj = ArrayUtils.filterArray(exceptionalStatuses,
(status => status.name === findStatus));
...
});当然,改变
发布于 2018-10-18 10:11:44
更改arrayPredicate声明,如下所示。
export type arrayPredicate<T> = (arg: T) => boolean;
class ArrayUtils {
static filterArray<T>(array: T[], arrayPred: arrayPredicate<T>): T {
const key = Object.keys(array).find(obj => arrayPred(array[obj]));
return array[key];
}
}由于您没有为arrayPredicate声明类型的参数,因此假定它是空对象。
这是一个有用的例子
发布于 2018-10-18 10:02:02
需要为数组添加一个类型为exmaple让sat类型的数组是SampleType[]。那么应该是
const array: SampleType[] = [
{
'name': 'object-1',
'id': 1
},
{
'name': 'object-2',
'id': 2
}
];然后将该类型传递给泛型函数。
ArrayUtils.filterArray<SampleType>(exceptionalStatuses, (status: SampleType => status.name === findStatus));SampleType应该是
export class SampleType{
name: string,
id: string
}https://stackoverflow.com/questions/52871497
复制相似问题