Вы можете делать какие-то причудливые вещи с условными типами, добавляя generi c в командный интерфейс:
interface PayloadDel { }
interface PayloadPut {}
interface PayloadSet {}
type Commands = 'set' | 'put' | 'del'
export interface Command<K extends Commands> {
command: K;
payload: K extends 'set' ? PayloadSet : K extends 'put' ? PayloadPut : PayloadDel;
}
let command: Command<'set'>
Таким образом, тип зависит от типа K