代码如下,想要实现 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 类型
}
}