簡體   English   中英

類型'T'上不存在屬性 - 一般問題

[英]Property does not exist on type 'T' - Generic problems

我有一個util,它接受一個數組和一個謂詞來執行數組的過濾,但是在使用我的自定義類型作為謂詞后,我收到一個錯誤說明

類型'T'上不存在屬性'name'

我認為通用屬性類型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));

  ...

});

當然,改變

更改您的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示例

需要為SampleType[]添加數組類型,讓數組的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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM