У меня есть функция, которая принимает массив объектов, соответствующих интерфейсу, в качестве параметра. Функция сгенерирует конечный автомат со свойством, строковым массивом значений и массивом объектов, определяющих переходы.
Я бы хотел (если возможно) иметь возможность выводить '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, ссылку на демо здесь:
1013 *
https://www.typescriptlang.org/play/?ssl=23&ssc=4&pln=1&pc=1#code / JYOwLgpgTgZghgYwgAgCpTiAzsMwD2IAPAMoB8yA3gFDLIxT4C2AXMiQDS3Jj5skBtALpcAvtWqhIsRChJg4kALKIAFqAgARCFgRRgAB15QiqCjToHGB6GACebLGH0gA5gG5uTxTraphnnTOmDh4hFhsAIJQGHamGNi4BMRg6lgCAOTekFgZQgIgAK5MAEbQQmRknuLUMIUgCGEg9FhMpmQAFPhGEcjRsaQKymoa2rr6RvgmZmQAlFTcUBBghVDN3WBY1RIwrR0CFshW3bYOyBk5YBlcdNm + yJmEENfnYADu + Hk3PAmhyb0Hbh0BjMNgZJ7XIE8PgPDIwfCfETcURCago2ZAA