类型“T”上不存在属性 - 一般问题
Posted
技术标签:
【中文标题】类型“T”上不存在属性 - 一般问题【英文标题】:Property does not exist on type 'T' - Generic problems 【发布时间】:2019-03-23 02:44:03 【问题描述】:我有一个使用数组和谓词来执行数组过滤的实用程序,但是在将我的自定义类型用于谓词之后,我收到一条错误消息
类型“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));
...
);
当然,改变
【问题讨论】:
【参考方案1】:如下所示更改您的 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 的类型中声明参数,因此假定它是空对象。
这是工作示例,
TypeScript example
【讨论】:
啊太棒了!谁能想到改变谓词中需要为您的数组添加一个类型,例如让数组的类型为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
【讨论】:
啊,我忘了补充一点,我的数组实际上已经有了一个类型。我根据您的建议应用了更改,但我仍然收到相同的错误:-/ 我想我找到了我的问题。由于某种原因,.name
属性实际上在我的type
中不可用。如果我发现更多信息,我会在这里调查和更新...以上是关于类型“T”上不存在属性 - 一般问题的主要内容,如果未能解决你的问题,请参考以下文章
类型“HttpEvent<Customer>”上不存在属性“数据”