JS с типами потока - передать Generi c от внешнего к внутреннему объему функции карри - PullRequest
0 голосов
/ 23 апреля 2020

Есть ли способ передать внешний тип Key во внутренний Key и аргумент внутренней функции?

Мне нужно, чтобы все эти типы были одинаковыми.

function getAudienceHelper<Key>(defintions: { [Key]: string }) {
  return function<Key>(
    prioritisedAudiences: Key[],
    ...

  ) {
      ...
  }
}

Так что, когда я вызываю getAudienceHelper, я передаю строковое перечисление типа AudienceKey, и оно перетекает прямо в другие функции в моем коде

type AudienceDefs = { 
  AUDIENCE_1: string,
  AUDIENCE_2: string
}

const AUDIENCE_DEFS: AudienceDefs = { 
  AUDIENCE_1: 'audience_1'
  AUDIENCE_2: 'audience_2'
}

type AudienceKey = $Keys<typeof Audience>;

getAudienceHelper<AudienceKey>(AUDIENCE_DEFS)

Я пытаясь определить типы и задаваясь вопросом, не перебрал ли я свои функции. Насколько строгим это должно быть? По сути, я хочу убедиться, что все, что я добавляю - AudienceKey, - это тот же тип, который я получаю от моего getAudienceHelper. Из кода попытки потока getAudienceHelper должен выполнить две другие функции внутри, чтобы вернуть значение того же типа.

1 Ответ

0 голосов
/ 28 апреля 2020

Я решил это, удалив шаблон c в моей первой функции и изменив параметр на объект.

function getAudienceHelper(defintions: any) {
  return function<Key>(
    prioritisedAudiences: Key[],
    ...

  ) {
      ...
  }
}

Когда вызывается внутренняя функция, инициализируется шаблон c Key и это будет выведено и сопоставлено с AUDIENCE_DEFS, который передается внутри. См. демонстрационный код .

const innerFunction = getAudienceHelper(AUDIENCE_DEFS);

innerFunction<AudienceKey>(prioritisedAudiences, ...)
...