如下: 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 第一种方式比较优雅一点