Как определить тип функции в соответствии с типом параметра

#javascript #reactjs #typescript

#javascript #reactjs #typescript

Вопрос:

В следующем случае, как определить тип функции в соответствии с b типом параметра

 const getData = (a: string, b?: string) => {
  const obj: Record<string, string> = JSON.parse(a)
  if (b) {
    return obj[b]
  }
  return obj
}

const c = getData("{'kind':'cs'}")  
const d = getData("{'kind':'cs'}", 'kind') 
 

Ожидаемый:

 const c = getData("{'kind':'cs'}")  // result: {kind: cs}  type:  c => Record<string, string>
const d = getData("{'kind':'cs'}", 'kind') // result: cs  type: d => string

 

Актуально

 const c = getData("{'kind':'cs'}")  // result: {kind: cs}  type:  c => Record<string, string> | string
const d = getData("{'kind':'cs'}", 'kind') // result: cs  type: d => Record<string, string> | string
 

Ответ №1:

Вы можете использовать синтаксис перегрузки функций typescript.

 function getData(a: string): Record<string, string>;
function getData(a: string, b: string): string;

function getData(a: string, b?: string) {
  const obj: Record<string, string> = JSON.parse(a);
  if (b) {
    return obj[b];
  }
  return obj;
}

const c = getData("{'kind':'cs'}");
const d = getData("{'kind':'cs'}", "kind");