关于泛型
来源: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”,而是可以直接进行取值的。
022023-06-05