代码如下,想要实现 Message 中:playload 的类型取决于 type 的值
下面已有的写法是不行的。
interface PayloadMap { join: PeerInfo; offer: RTCSessionDescriptionInit; answer: RTCSessionDescriptionInit; icecandidate: RTCIceCandidateInit; leave: PeerInfo; } // 客户端发送,服务端接受的数据格式 interface Message { type: 'join' | 'offer' | 'answer' | 'icecandidate' | 'leave'; nick: string; id: string; // playload 的类型取决于 type 的值 payload: PayloadMap[Message['type']]; } 比如:
const m: Message = { type: 'join', nick: 'Fuck', id: '123456', payload: { // 此时 payload 应该是 PeerInfo 类型 } } 