Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 泛型:推断的函数参数类型_Typescript - Fatal编程技术网

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:有没有办法让属性上的
成为可选的?这是我到目前为止得到的。。。