TypeScript 每日挑战,你敢来试试吗?

「本文已参与好文召集令活动,点击查看:后端、大前端双赛道投稿,2万元奖池等你挑战!

其实大多数 TypeScript 开发者,对 TypeScript 的利用,还停留在初级水平。

不信吗?来试试每日挑战吧!

今日题目

// 我有一堆必填字段
interface DocType {
    aaa: string,
    bbb: string,
    ccc: string
}

// 函数类型定义,等你来改写 ...
function makeDoc(part1: any, part2: any) {
    // ...
}
复制代码

有一个名为 DocTypeinterface,包含一组必填字段

需要实现一个名为 makeDoc 的函数定义,它有 2 个参数:part1part2,它们都拥有 DocType 的部分字段(Partial<DocType>

需要你在 TypeScript 类型定义层面,实现 makeDoc 两个参数的类型校验:

  1. part1part2 的字段合并后,即 Object.assign({}, part1, part2),满足 DocType 的类型定义。
  2. part1part2 中不能有重复字段。

测试用例

// 合法
makeDoc({
    aaa: '111',
    bbb: '222'
}, {
    ccc: '333'
})

// 合法
makeDoc({
    aaa: '111',
    bbb: '222',
    ccc: '333'
}, {})

// 合法
makeDoc({ccc: '333'}, {
    aaa: '111',
    bbb: '222'
})

// 应该报错(因为缺少必填字段 ccc)
makeDoc({
    aaa: '111',
}, {
    bbb: '222'
})

// 应该报错(因为 aaa 字段重复出现)
makeDoc({
    aaa: '111',
    bbb: '222'
}, {
    aaa: '333',
    ccc: '444',
})
复制代码

欢迎你将答案或者思路留言在评论区~

答案将在 周五下午 17:00 揭晓。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享