@awenn2015
Веб-программист самоучка

Как правильно проставить возвращаемый тип функции?

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

// Enum нужен потому что я хочу потом где-то использовать эти ключи
const enum TestKeys {
  A = 'a',
  B = 'b',
  C = 'c',
}

type BaseTest = { label: string, value: any }

interface Type extends Record<TestKeys, BaseTest> {
  [TestKeys.A]: { label: string, value: number },
  [TestKeys.B]: { label: string, value: string },
  [TestKeys.C]: { label: string, value: boolean }
}

const test: Type = {
  [TestKeys.A]: { label: '', value: 12 },
  [TestKeys.B]: { label: '', value: 'test' },
  [TestKeys.C]: { label: '', value: true }
}

// Partial так как это пример объекта
// Но по ходу рантайма он может менять кол-во объектов внутри
function testFn<T extends Partial<Type>, K extends TestKeys>(
  obj: T, key: K
): T[K] extends unknown ? undefined : T[K]['value'] {
  return key in obj ? obj[key]!.value : undefined
}

// Return type должен быть string | undefined
const result = testFn(test, TestKeys.B)
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@StockholmSyndrome
function testFn<T extends Type, K extends TestKeys>(
  obj: Partial<T>, key: K
): T[K]['value'] | undefined {
  return key in obj ? obj[key]!.value : undefined
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
27 апр. 2024, в 13:49
300000 руб./за проект
27 апр. 2024, в 13:30
30000 руб./за проект
27 апр. 2024, в 13:22
600 руб./за проект