programing

속성 'id'가 'T' 유형에 없습니다. (2339) 유형 스크립트 Generics 스크립트 Generics 오류

muds 2023. 6. 10. 09:50
반응형

속성 'id'가 'T' 유형에 없습니다. (2339) 유형 스크립트 Generics 스크립트 Generics 오류

라는 기능이 있습니다.updateArrayOfObjects그러면 어레이의 개체가 업데이트됩니다.아래와 같이 이 함수에 제네릭 유형을 전달합니다.

interface OtherIncomeSource {
  id?: string;
  incomeDescription?: string;
  amount?: number;
}

const otherIncomes = [
          {
            id: "#6523-3244-3423-4343",
            incomeDescription: "Rent",
            amount: 100
          },
          {
            id: "#6523-3244-3423-4343",
            incomeDescription: "Commercial",
            amount: undefined
    }
]

const updateArrayOfObjects = <T>(arrayOfObjects: T[], newObject: T, deleteObject: boolean = false): T[] => {
    const newArrayOfObjects = arrayOfObjects.slice();

  let index = newArrayOfObjects.findIndex((obj: T) => obj.id === newObject.id)
  if(deleteObject) {
    newArrayOfObjects.splice(index, 1);
  } else {
    if (index === -1) {
      newArrayOfObjects.push(newObject);
    } else {
      newArrayOfObjects[index] = newObject;
    }
  }

  return newArrayOfObjects
}

const newData = updateArrayOfObjects<OtherIncomeSource>(otherIncomes, {id: '1233', incomeDescription: 'agri', amount: 5000})

에 액세스할 때 아래에 언급된 라인에서 오류가 발생합니다.id"'ID' 속성이 'T' 유형에 존재하지 않습니다. (2339)"라고 말합니다.

let index = newArrayOfObjects.findIndex((obj: T) => obj.id === newObject.id)

아래는 이 문제의 전체 환경을 위한 유형 스크립트 놀이터 링크이며, 여기서 오류는 빨간색으로 강조 표시됩니다. 유형 스크립트 놀이터의 예

다음과 같이 제네릭 유형에 대한 제약 조건을 제공해야 합니다.<T extends { id?: string }>

라인 업데이트const updateArrayOfObjects = <T>(arrayOfObjects: T[], newObject: T, deleteObject: boolean = false): T[] => {

로.const updateArrayOfObjects = <T extends { id?: string }>(arrayOfObjects: T[], newObject: T, deleteObject: boolean = false): T[] => {

저는 위의 답변이 저에게 통하지 않는 더 복잡한 경우를 겪었습니다.

이것이 저에게 도움이 되었습니다.

type SimpleTableProps<T> = {
  data: Array<T & { id?: number }>;
  ...
};

const SimpleTable = <T,>(props: SimpleTableProps<T>): JSX.Element => {...}

언급URL : https://stackoverflow.com/questions/62437690/property-id-does-not-exist-on-type-t-2339-typescript-generics-error

반응형