Typescript 泛型:推断的函数参数类型
我有一个函数,它接受带有一些状态定义的配置对象(它是一个状态机函数) 例如:Typescript 泛型:推断的函数参数类型,typescript,Typescript,我有一个函数,它接受带有一些状态定义的配置对象(它是一个状态机函数) 例如: createStateMachine({ initial: 'inactive', states: { inactive: { transitions: { ACTIVATE: 'active' }, }, active: { transitions: { DEACTIVATE: 'inactive' }, effect(send) {
createStateMachine({
initial: 'inactive',
states: {
inactive: {
transitions: { ACTIVATE: 'active' },
},
active: {
transitions: { DEACTIVATE: 'inactive' },
effect(send) {
// an useless machine, will send back to inactive
send('DEACTIVATE') // should only accept "DEACTIVATE", but "ACTIVATE" | "DEACTIVATE" is also good enough.
},
},
},
});
它还接受一个函数effect
,该函数带有一个send
回调,可用于触发状态更改。我希望send
参数类型是从配置对象本身推断出的可能转换的并集
TypeScript可以这样做吗?您可以这样做,但问题是编译器不能在推断状态名和转换名的泛型类型的同时,在上下文中为您推断
send
回调参数类型。如果您可以通过重构来使用中间函数来帮助进行推理,那么您可以执行以下操作。让我知道,如果其中一个或两个为你工作,我可以写一个答案;否则,请再次详细说明您对Hanks@jcalz的其他要求。我明白-第二个版本当然是一个很好的选择。我试图实现的目标是:我在一个状态机库上工作——我在工作中使用它。其他许多库要么没有类型,要么有类型,但需要您提供一个配置对象和一个单独的接口作为泛型参数传递。问题是,现在您必须维护两个应该相同的独立部分。我正试图让状态机尽可能多地从config对象推断,这样它就可以提供代码完成和类型安全性。下面是自述文件,以防您想查看整个API:有没有办法让属性上的成为可选的?这是我到目前为止得到的。。。