首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >属性在类型'T‘上不存在--泛型问题

属性在类型'T‘上不存在--泛型问题
EN

Stack Overflow用户
提问于 2018-10-18 09:57:21
回答 2查看 12.3K关注 0票数 8

我有一个util,它接受一个数组和一个谓词来执行数组的过滤,但是在对谓词使用我的自定义类型之后,我得到了一个错误声明

属性'name‘在类型'T’上不存在

我认为泛型属性类型T会接受任何东西吗?

我漏掉了什么明显的东西吗?

Array.ts

代码语言:javascript
复制
export type arrayPredicate = <T>(arg: T) => boolean;

ArrayUtil

代码语言:javascript
复制
static filterArray<T>(array: T[], arrayPred: arrayPredicate): T {
    const key =  Object.keys(array).find(obj => arrayPred(array[obj]));
    return array[key];
  }

在测试中的使用

代码语言:javascript
复制
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));

  ...

});

当然,改变

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-18 10:11:44

更改arrayPredicate声明,如下所示。

代码语言:javascript
复制
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实例

票数 1
EN

Stack Overflow用户

发布于 2018-10-18 10:02:02

需要为数组添加一个类型为exmaple让sat类型的数组是SampleType[]。那么应该是

代码语言:javascript
复制
const array: SampleType[] = [
  {
    'name': 'object-1',
    'id': 1
  },
  {
    'name': 'object-2',
    'id': 2
  }
];

然后将该类型传递给泛型函数。

代码语言:javascript
复制
 ArrayUtils.filterArray<SampleType>(exceptionalStatuses, (status: SampleType => status.name === findStatus));

SampleType应该是

代码语言:javascript
复制
export class SampleType{
  name: string,
  id: string
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52871497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档