9-23,9-24作业
来源:10-23 【高级类型Required] 融合Vue3源码+ 多级接口掌握Required +ReadOnly,Partial作业

匆匆又夏天丶
2021-09-23
怎么实现完成这个数组 只允许保留 title 和 completed这两个属性然后扁平化
interface Todo {
title: string;
completed: boolean;
description: string;
}
let todoList: Todo[] = [
{
title: '开发权限管理模块',
completed: true,
description: '使用vue3+typescript来开发'
},
{
title: '年会',
completed: false,
description: '12月29日上午菲亚特大酒店'
}
];
// 作业:怎么实现完成这个数组 只允许保留 title 和 completed这两个属性
type Record<T> = {
[P in keyof any]: T;
};
// type A = {
// title: string;
// completed: boolean;
// }
type A = Pick<Todo, 'title' | 'completed'>;
// type B = {
// [x: string]: A;
// }
type B = Record<A>;
function convertSubTodoItemList() {
return todoList.reduce((prev, item) => {
return {
...prev,
[item.title]: item
};
}, {} as Record<Pick<Todo, 'title' | 'completed'>>);
}
Required修饰后属性多了
CompileErrorType 继承了 SyntaxError,而 SyntaxError 又继承了别的接口,最终多出来的属性都是继承过来的。
1回答
-
keviny79
2021-09-23
// 老师现在给出 9-23 的 最终答案
// 答案1: 见 S100 处修改
function convertSubTodoItemList() {
// reduce 第二个参数是 Todo 类型,所以可以解构成{ title, completed }
return todoList.reduce((prev, { title, completed }) => { //S100 不能写成 item
return {
...prev,
[title]: { title, completed }
};
}, {} as Record<A>);
}
// 答案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())
10
相似问题