Typescript: Самостоятельная ссылка на значение интерфейса как тип - PullRequest
1 голос
/ 23 января 2020

У меня есть функция, которая принимает массив объектов, соответствующих интерфейсу, в качестве параметра. Функция сгенерирует конечный автомат со свойством, строковым массивом значений и массивом объектов, определяющих переходы.

Я бы хотел (если возможно) иметь возможность выводить '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
...