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
呢?