TypeScript 如何实现一个二选一的 interface?-灵析社区

喝一杯吧可以吗

TypeScript 如何约束一个 interface ,其中的两个值为2选一, (不能都存在,也不能都不存在) 如下: export interface MockData { name: string; nickName: string; } 这个 interface 目前并不符合我的需求,我的需求是 name 或者 nickName 二选一,该如何改造?或者如何实现呢?

阅读量:24

点赞量:0

问AI
如下: export interface NameData { name: string; } export interface NickNameData { nickName: string; } export type Without = { [P in Exclude]?:never } export type NameOrNickName = (Without & U) | (Without & T) const myData1: NameOrNickName = { name:'张子枫', nickName:'子枫' } // fail const myData2: NameOrNickName = { name:'张子枫', } // ok const myData3: NameOrNickName = { nickName:'子枫' } // ok 等同于: export interface NameDataNoNickName { name: string; nickName?:never; } export interface NickNameDataNoName { nickName: string; name?:never } export type NameOrNickName2 = NameDataNoNickName | NickNameDataNoName const omyData1: NameOrNickName2 = { name:'张子枫', nickName:'子枫' } // fail const omyData2: NameOrNickName2 = { name:'张子枫', } // ok const omyData3: NameOrNickName2 = { nickName:'子枫' } // ok 第一种方式比较优雅一点