Интерфейс TS для динамического ввода ключа c в объект - PullRequest
0 голосов
/ 22 апреля 2020

Я хотел бы написать правильный интерфейс для этого объекта. Ключ шага должен быть Dynami c, а значение является логическим. Это объект:

const obj = {
  A: {
    step: {
      a: true,
      b: true,
      c: true,
    },
  },
  B: {
    step: {
      a: true,
      d: true,
    },
  },
  C: {
    step: {
      e: true,
      f: true,
      g: true,
    },
  },
}

До сих пор я пробовал это, но я все еще получил ошибку.

interface OBJ_INTERFACE {
  side: {
    step: {
      [key: string]: boolean,
    }
  }
}

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Вы можете извлечь Step тип и повторно использовать его в интерфейсе:

type Side = {
  step: {
    [key: string]: boolean,
  }
};

interface OBJ_INTERFACE {
  A: Side;
  B: Side;
  C: Side;
}

Детская площадка


Или определить сопоставленный тип:

type OBJ_INTERFACE = {
  [P in 'A' | 'B' | 'C']: {
    step: {
      [key: string]: boolean,
    }
  }
}

Детская площадка

1 голос
/ 22 апреля 2020

Вы не детализируете ошибку, поэтому я могу только предположить, что она связана с попыткой использовать интерфейс следующим образом:

const obj: OBJ_INTERFACE = {
  A: {
    step: {
      ...
    }
  }
}

В этом случае ваш интерфейс не учитывает side свойство динамически именуется 'A' | 'B' | 'C'.

Попробуйте также сделать side dynamici c:

interface OBJ_INTERFACE {
    [key: string]: {
      step: {
        [key: string]: boolean
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...