Typescript: объекты с одним ключом - PullRequest
0 голосов
/ 27 апреля 2018

Рассмотрим следующую (частично типизированную) функцию:

const fn = <T, ?? ...>(name: ??, value: T) => ({ [name]: value })

Можно ли завершить набор так, чтобы

fn("hello", someT)

будет иметь тип

{ hello: T }

Если нет: есть ли другой подход, дающий аналогичный результат?

Я думал о чем-то вроде

<K extends string, T>(name: K, value: T): { [k: K]: T} => ...

но это не работает.

1 Ответ

0 голосов
/ 27 апреля 2018

Да.

Используйте параметр типа для захвата литерального типа ключа, подтипа string, и используйте его для определения сопоставленного типа

const fn = <T, N extends string>(name: N, value: T) => <{[P in N]: T}>({
  [name]: value
});

К сожалению, утверждение типа требуется.

const hasPOfNumber = fn('p', 52);

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