TypeScript 如何约束一个 interface ,其中的两个值为2选一,
(不能都存在,也不能都不存在)
如下:
export interface MockData { name: string; nickName: string;}
这个 interface 目前并不符合我的需求,我的需求是 name 或者 nickName 二选一,该如何改造?或者如何实现呢?
如下:
export interface NameData { name: string;}export interface NickNameData { nickName: string;}export type Without<T,U> = { [P in Exclude<keyof T, keyof U>]?:never}export type NameOrNickName<T,U> = (Without<T,U> & U) | (Without<U,T> & T)const myData1: NameOrNickName<NameData, NickNameData> = { name:'张子枫', nickName:'子枫'} // failconst myData2: NameOrNickName<NameData, NickNameData> = { name:'张子枫',} // okconst myData3: NameOrNickName<NameData, NickNameData> = { nickName:'子枫'} // ok
等同于:
export interface NameDataNoNickName { name: string; nickName?:never;}export interface NickNameDataNoName { nickName: string; name?:never}export type NameOrNickName2 = NameDataNoNickName | NickNameDataNoNameconst omyData1: NameOrNickName2 = { name:'张子枫', nickName:'子枫'} // failconst omyData2: NameOrNickName2 = { name:'张子枫',} // okconst omyData3: NameOrNickName2 = { nickName:'子枫'} // ok
第一种方式比较优雅一点
https://github.com/maninak/ts-xor
npm包ts-xor引入了新的映射类型XOR,它可以帮助你构建包含互斥对象键的自定义TypeScript类型。
要求是这样的(目前的话换行单选多选判断换行展示已经处理完了): 但是现在有个问题就是选项的个数问题,选项最多是9个(也就是从A~I),最少是3~4个(判断的选项就是两个,但是若遇到判断就换行了,倒是不用太操心),选项个数不固定每题的宽度就不固定,宽度不固定列数就不固定,列数有影响到了行数,但又要求每列得对齐。 大致就是: 1.选项个数不固定 2.支持横排、竖排的切换 3.每列得对齐 所以想问问各位
zrender绘制成功后,不知道缩略图怎么实现,没有思路主要,想问问大概是怎么个思路
本文向大家介绍如何简单的实现一个promise?相关面试题,主要包含被问及如何简单的实现一个promise?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先明确什么是promiseA+规范,参考规范的地址:primise A+规范 如何实现一个promise,参考我的文章: 实现一个完美符合Promise/A+规范的Promise 一般不会问的很详细,只要能写出上述文章中的v1.0版本
a、b默认都可选,但当a有值时,让b成为必填项。 应该如何实现?
本文向大家介绍Javascript HTML5 Canvas实现的一个画板,包括了Javascript HTML5 Canvas实现的一个画板的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了HTML5 Canvas实现的一个画板代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助。
https://shanghai.wellingtoncollege.cn/ 每次鼠标滚轮往下一格时, 页面就会往下滑动固定高度的一页, 这种效果是怎么实现的?