9.23答案

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

慕粉3227390

2021-09-12

interface Todo{
title: string
completed: boolean
description: string
}

let todoList: Todo[] = [
{
title: ‘开发权限管理模块’,
completed: true,
description: ‘使用vue3来开发’
},
{
title: ‘年会’,
completed: false,
description: ‘12月29号上午’
},
]

type Record = {
[P in keyof any]: T
}

type pickType2 = Pick<Todo, “title”|“completed”>
let todoList2:pickType2[] = todoList.map(({title,completed})=>({title,completed}))

写回答

2回答

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



1
0

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

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

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

871 学习 · 425 问题

查看课程