推断TypeScript中的接口类型参数

推断TypeScript中的接口类型参数,typescript,type-inference,Typescript,Type Inference,让我们有一个以下代码: 接口动作{ 类型:字符串; } 接口ActionA扩展了操作{ 类型:“A”; 有效载荷:数量; } 接口ActionB扩展了Action{ 类型:“B”; 有效载荷:字符串; } 接口处理器{ 行动:T; 过程:(动作:T)=>无效; } //用法 const actionA:actionA={type:'A',payload:42}; 常量处理器:处理器={ 行动:行动A, 过程(行动){ // ... }, }; 现在我认为在const processorA:Pr

让我们有一个以下代码:

接口动作{
类型:字符串;
}
接口ActionA扩展了操作{
类型:“A”;
有效载荷:数量;
}
接口ActionB扩展了Action{
类型:“B”;
有效载荷:字符串;
}
接口处理器{
行动:T;
过程:(动作:T)=>无效;
}
//用法
const actionA:actionA={type:'A',payload:42};
常量处理器:处理器={
行动:行动A,
过程(行动){
// ...
},
};
现在我认为在
const processorA:Processor=…
中指定类型参数
ActionA
是多余的,因为它可以从
action:ActionA
中推断出来。不幸的是,如果我只写
常量processorA:Processor=…
,Typescript会报告错误

是否可以改进接口,以便推断
处理器的类型参数

高级版本:


我还希望
action
字段的类型为
T |'*'
。在这种情况下,
操作
过程(操作)
的参数应为
操作
类型(或者在最坏的情况下仅为
任何
)。这是否可能与上述类型参数推断一起进行?

在typescript中无法推断部分变量类型。对于变量推断是全部或无,您可以让编译器推断它,或者在类型注释中指定它

您可以使用函数推断操作的类型:

function createProcessor<T extends Action>(p: Processor<T>) {
    return p
}
const processorA = createProcessor({
  action: actionA,
  process(action) {
    // ...
  },
});

函数createProcessor(p:Processor){
返回p
}
const processorA=createProcessor({
行动:行动A,
过程(行动){
// ...
},
});
或者,您可以使用IIFE作为一种奇特的类型断言:

const processorA = (<T extends Action>(p: Processor<T>) => p)({
  action: actionA,
  process(action) {
    // ...
  },
});
constprocessora=((p:Processor)=>p)({
行动:行动A,
过程(行动){
// ...
},
});

在引入
createProcessor
tsc stucks之后。Offtopic:是否有方法对tsc进行分析,以了解什么会降低其性能?