【发布时间】:2019-07-30 16:24:25
【问题描述】:
让我们有以下代码:
interface Action {
type: string;
}
interface ActionA extends Action {
type: 'A';
payload: number;
}
interface ActionB extends Action {
type: 'B';
payload: string;
}
interface Processor<T extends Action> {
action: T;
process: (action: T) => void;
}
// usage
const actionA: ActionA = { type: 'A', payload: 42 };
const processorA: Processor<ActionA> = {
action: actionA,
process(action) {
// ...
},
};
现在我认为在const processorA: Processor<ActionA> = ... 中指定类型参数ActionA 是多余的,因为它可以从action: ActionA 中推断出来。不幸的是,如果我只写 const processorA: Processor = ...,Typescript 会报告错误。
是否可以改进接口以便推断Processor 的类型参数?
高级版:
我还希望 action 字段的类型为 T | '*'。在这种情况下,process(action) 的 action 参数应该是 Action 类型(或者在最坏的情况下只是 any)。这可以与上述类型参数推断一起使用吗?
【问题讨论】: