关于泛型

来源:1-1 课程介绍(导学 )

萧萧啊

2023-06-03

interface TestProps {
  _id: string;
  name: string;
}
const testData: TestProps[] = [
  {
    _id: '1',
    name: 'a'
  },
  {
    _id: '2',
    name: 'b'
  }
]
// 转换成
export const arrToObj = <T extends { _id: string }>(arr: Array<T>) => {
  return arr.reduce((prev, cur) => {
    if (cur._id) {
      prev[cur._id] = cur
    }
    return prev
  }, {} as { [key: string]: T })
}

arrToObj(testData)

我理解的泛型是把类型当参数进行传递, 在上面代码中定义了一个TestProps, 里面定义了_id: string, 那为什么cur.id的时候会报错类型“T”上不存在属性“_id”, 如果是_id为一个可选类型, 为什么我不能直接在TestProps中直接定义为_id?: string呢?

写回答

1回答

张轩

2023-06-04

同学你好 不知道我是否理解了你的问题

刚用你的代码试了,

假如你直接在函数内取值 cur._id 是不会报错的啊。并没有出现你说的“类型“T”上不存在属性“_id”,而是可以直接进行取值的。


0
2
张轩
回复
萧萧啊
同学你好 这个是泛型的限制,这么写的意思是说,这个范型里面必须要有这样的结构,也就是说必须要要有 _id 这个属性,并且是 string 类型。和 TestProps 没有关系的。
2023-06-05
共2条回复

Vue3 + TS 仿知乎专栏企业级项目

带你完成前后端分离复杂项目,率先掌握 vue3 造轮子技能

3142 学习 · 2313 问题

查看课程

相似问题

关于泛型

回答 1

泛型

回答 1

泛型

回答 1