Skip to content

Parameters<Type>

INFO

Parameters\<Type>은 TypeScript 3.1 이상에서 사용할 수 있는 내장 유틸리티 타입이에요. 자세한 내용은 타입스크립트 핸드북릴리즈 노트를 참고해주세요.

개요

Parameters\<Type>은 TypeScript에 내장된 유틸리티 타입으로, 함수 타입 Type의 매개변수로부터 튜플 유형을 생성해요. 이를 통해 수동으로 재정의하지 않고도 코드의 다른 곳에서 함수 매개변수 타입을 추출하고 재사용할 수 있어요.

문법

ts
type Parameters<T extends (...args: any) => any> = T extends (...args: infer P) => any ? P : never;
  • Type (T): 매개변수 타입을 추출할 함수 타입을 나타내요.

예제

예제 #1

ts
type T0 = Parameters<(a: number) => void>; // [a: number]

type T2 = Parameters<(args: { a: number; b: string }) => void>; // [args: { a: number, b: string}]

type T1 = Parameters<() => void>; // []

type T3 = Parameters<any>; // unknown[]

type T4 = Parameters<never>; // never

type T5 = Parameters<string>; // never
// Type 'string' does not satisfy the constraint '(...args: any) => any'.

type T6 = Parameters<Function>; // never
// Type 'Function' does not satisfy the constraint '(...args: any) => any'.
// Type 'Function' provides no match for the signature '(...args: any): any'.

예제 #2

ts
function logAndInvoke<F extends (...args: any[]) => any>(func: F): (...args: Parameters<F>) => ReturnType<F> {
  return (...args: Parameters<F>): ReturnType<F> => {
    console.log(
      'Call function with arguments type',
      args.map(arg => typeof arg)
    );
    console.log('Call function with arguments values', args);
    return func(...args);
  };
}

const addFn = (a: number, b: number): number => {
  return a + b;
};

const logging = logAndInvoke(addFn);
// const logging: (a: number, b: number) => number

logging(1, 2);
// [LOG]: "Call function with arguments type",  ["number", "number"]
// [LOG]: "Call function with arguments values",  [1, 2]