Problem

지난 연습과 유사하게 TypeScript의 유틸리티 타입 중 하나를 사용하여 함수에서 타입을 가져올 것입니다.

이번에는 이 makeQuery 함수에서 매개변수를 추출하려고 합니다.

const makeQuery = (
	url: string,
	opts?: {
		method?: string;
		headers?: {
			[key: string]: string;
		};
		body?: string;
	},
) => {};

type MakeQueryParameters = unknown;

테스트에 따르면 MakeQueryParameters 는 첫 번째 값이 url: string 이고 두 번째 값이 옵셔널 opts 객체인 튜플을 반환해야 한다는 것을 알 수 있습니다.

type tests = [
  Expect<
    Equal<
      MakeQueryParameters,
      [
        url: string,
        opts?: {
          method?: string
          headers?: {
            [key: string]: string
          }
          body?: string
        }
      ]
    >
  >
]

함수 매개변수의 타입을 가져오려면 typeof와 다른 유틸리티 타입이 필요합니다.

타입스크립트 문서에서 유틸리티 타입 중 도움이 되는 것이 있는지 살펴보세요.

나의 답

import { Equal, Expect } from '../helpers/type-utils';

const makeQuery = (
  url: string,
  opts?: {
    method?: string;
    headers?: {
      [key: string]: string;
    };
    body?: string;
  }
) => {};

type MakeQueryParameters = Parameters<typeof makeQuery>;

type tests = [
  Expect<
    Equal<
      MakeQueryParameters,
      [
        url: string,
        opts?: {
          method?: string;
          headers?: {
            [key: string]: string;
          };
          body?: string;
        }
      ]
    >
  >
];

Parameters 직접 구현해봄

type MyParameters<T> = T extends (...args: infer P) => any ? P : never;

Solution

Use a Utility Type to Extract Function Parameters