我有一个函数,该函数将与接口匹配的对象数组作为参数。该函数将生成一个带有状态,值的字符串数组和定义转换的对象数组的有限状态机。
我希望(如果可能的话)能够推断过渡数组上的'from'和'to'参数,作为states
属性(潜在状态数组)的字面结合。我目前的尝试仅在string
接口上将类型缩小为string[]
和Transition
。理想情况下,以下示例中的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'],
}]
}])
打字稿的版本是3.7,演示的链接在这里: