9-23作业答案
来源:10-22 【高级类型Pick+Record】 高级类型联合使用+作业

crazyones110
2021-09-12
interface Todo {
title: string;
completed: boolean;
description: string;
}
type MyRecord<T> = {
[P in keyof any]: T
}
const todoList: Array<Todo> = [
{
title: "t1",
completed: true,
description: "d1"
},
{
title: "t2",
completed: true,
description: "d2"
},
{
title: "t3",
completed: false,
description: "d3"
},
];
const obj = todoList
.map(({ title, completed }) => ({
title,
completed
}))
.reduce((acc, cur) => ({
...acc,
[cur.title]: cur
}), {} as MyRecord<Pick<Todo, "title" | "completed">>);
2回答
-
keviny79
2021-09-23
现在给出最终答案
// 9-23 的 最终的两个 答案
// 答案1: 见 S100 处修改
function convertSubTodoItemList() {
// reduce 第二个参数是 Todo 类型,所以可以解构成{ title, completed }
return todoList.reduce((prev, { title, completed }) => { //S100
return {
...prev,
[title]: { title, completed }
};
}, {} as Record<Pick<Todo, 'title' | 'completed'>>);
}
// 答案2:
let subTodoItemList: Record<Pick<Todo, "title" | "completed">> =
{ "title": { "title": "df", completed: false } }
function convertSubTodoItemList(subTodoItemList: Record<Pick<Todo, "title" | "completed">> = {}) {
todoList.forEach(({ title, completed }) => {
subTodoItemList[title] = { title, completed }
})
return subTodoItemList
}
console.log(convertSubTodoItemList())
00 -
keviny79
2021-09-14
你写的正确,还有一种方法也可以实现:
function convertSubTodoItemList(subTodoItemList: Record<Pick<Todo, "title" | "completed">> = {}) {
todoList.forEach(({ title, completed }) => {
subTodoItemList[title] = { title, completed }
})
return subTodoItemList
}
console.log(convertSubTodoItemList())
00
相似问题