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())




0
0

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())


0
0

晋级TypeScript高手,成为抢手的前端开发人才

轻松驾驭 TypeScript 高级用法, 突破前端成长瓶颈

871 学习 · 425 问题

查看课程