typescript - 属性 'id' 在类型 'T' 上不存在。(2339)Typescript 泛型错误

标签 typescript

我有一个名为 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)

以下是此问题完整环境的 typescript 操场链接,此处错误以红色突出显示:Example in Typescript Playground

最佳答案

您需要为您的泛型类型提供如下约束:<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[] => {

关于typescript - 属性 'id' 在类型 'T' 上不存在。(2339)Typescript 泛型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62437690/

相关文章:

angular - 使用已知/声明的组件插入动态 Angular 4.x 内容

typescript - 使用 "withRouter"和 Typescript 时的类型问题

typescript - 从构造函数类型获取实例类型

validation - Angular 2 : How change pristine of NgModel in code?

angular - 全局化 Angular 组件内的js

javascript - 如何使用基于react(TypeScript)上的 `as`的props动态创建html元素

angular - 在表行中格式化 XML

typescript - 自制方法装饰器删除所有元数据,我该如何解决?

typescript - 使用 { "extends": . .. } 时查看生成的 tsconfig

reactjs - Webpack 无法解析 ant design 模块