Как правильно печатать управляемый объект с помощью Typescript - PullRequest
2 голосов
/ 11 апреля 2020

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

const initialObj = {
  a: (c: number) => ({ c }),
  b: (c: number) => ({ d: c }),
}

Я хочу создать еще один объект из этого. Там, где ключи совпадают, а значения являются возвращаемыми объектами.

{
  a: { c: 4 };
  b: { d: 4 };
}

Я попытался напечатать это так:

{ [Key in typeof keyof initialObj]: ReturnType<typeof initialObj[Key]> }

С этим я получаю такой тип:

{
  a: { c: number } | { d: number };
  b: { c: number } | { d: number };
}

То, что я хочу получить в конце, выглядит так:

{
  a: { c: number };
  b: { d: number };
}

Возможно ли это? Если да, то как мне его напечатать?

1 Ответ

2 голосов
/ 11 апреля 2020

Похоже, ваша попытка очень близка, но typeof и keyof поменялись местами.

type Foo = { [Key in keyof typeof initialObj]: ReturnType<typeof initialObj[Key]> }

Смотрите эту машинописную игровую площадку . Это демонстрирует, что переменная типа Foo имеет правильную семантику. Однако, если вы используете старую версию машинописного текста, это может не сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...