是否可以根据属性值设置属性类型?
例如,如果命令为:
现在我找到的最接近的解决方案是:
export interface Command {
command: 'set' | 'put' | 'del';
payload: PayloadSet | PayloadPut | PayloadDel;
}
但是,这允许用户设置命令并设置错误的有效载荷
答案 0 :(得分:2)
将其设计为联合体:
type Command =
| { command: 'set'; payload: PayloadSet; }
| { command: 'put'; payload: PayloadPut; }
| { command: 'del'; payload: PayloadDel; }
答案 1 :(得分:0)
您可以通过向Command接口添加泛型来对条件类型做一些花哨的事情:
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
的类型