Typescript:将接口值作为类型进行自引用

Typescript:将接口值作为类型进行自引用,typescript,state-machine,typescript-generics,Typescript,State Machine,Typescript Generics,我有一个函数,它将匹配接口的对象数组作为参数。该函数将生成一个具有属性、值字符串数组和定义转换的对象数组的有限状态机 我希望(如果可能的话)能够推断transitions数组上的'from'和'to'参数,作为states属性(潜在状态数组)的文字并集。我当前的尝试仅将转换界面上的类型缩小为string和string[]。理想情况下,在下面的示例中,S应该是'one'|'two' interface Transition<S> { from: S, to: S[], } i

我有一个函数,它将匹配接口的对象数组作为参数。该函数将生成一个具有属性、值字符串数组和定义转换的对象数组的有限状态机

我希望(如果可能的话)能够推断transitions数组上的'from'和'to'参数,作为
states
属性(潜在状态数组)的文字并集。我当前的尝试仅将
转换
界面上的类型缩小为
string
string[]
。理想情况下,在下面的示例中,
S
应该是
'one'|'two'

interface Transition<S> {
  from: S,
  to: S[],
}

interface StateMachineDescriptor<T> {
  property: string;
  states: T[];
  transitions: Array<Transition<this['states'][number]>>;
}

function fsm<T>(opts: Array<StateMachineDescriptor<T>>) {
  return opts;
}

fsm([{
  property: 'test',
  states: ['one', 'two'],
  transitions: [{
    from: 'one',
    to: ['foo'],
  }]
}])
接口转换{
发件人:S,
致:S[],
}
接口状态机描述符{
属性:字符串;
国家:T[];
过渡:数组;
}
功能fsm(选项:阵列){
返回选项;
}
密克罗尼西亚联邦([{
属性:“测试”,
国家:[“一”、“二”],
过渡:[{
从"一",,
收件人:['foo'],
}]
}])
Typescript版本为3.7,此处有演示链接:


您能否将
功能fsm(…)
更改为
功能fsm(…)
,看看是否符合您的所有用例?如果是的话,我会写下来的。如果没有,请详细说明您的用例,以说明哪些地方不适合您。祝你好运您能否将
函数fsm(…)
更改为
函数fsm(…)
,看看是否满足您的所有用例?如果是的话,我会写下来的。如果没有,请详细说明您的用例,以说明哪些地方不适合您。祝你好运