@deight

Как задокументировать что аргумент функции может принимать одно значение из ключей объекта?

const values = {
  x: 1,
  y: 2
}
/**
  * @param {'x'|'y'} [key]
  */
function getValue(key) {
  return values[key]
}


Как сделать что бы не надо было при добавлении нового ключа добавлять его в @param
  • Вопрос задан
  • 134 просмотра
Пригласить эксперта
Ответы на вопрос 1
RubaXa
@RubaXa
А никак, всё равно какой-то `@typedef` придётся объявить

/**
 * @typedef   {('x' | 'y')}  XValueKeys
 */

function getValue(/** XValueKeys */key) {
  return values[key]
}


В TypeScript/Flow тоже придётся создать interface/type, но с TS было бы красивее и типизация не только на вход, но и выход:

type XValues = {x: number, y: number};

const values: XValue = {x: 1, y: 2};

function getValue<K extends keyof XValues>(key: K): XValues[K] {
  return values[key];
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы