Generic #4

꾸준히·2025년 4월 22일

TypeScript

목록 보기
8/17

Generic 꼬리에 꼬리 물기 😅

호출 시그니처를 가진 객체 예시를 보면서 함수 타입 자체와 사용 방식이 크게 다르지 않아,
두 방식을 비교해보았다.

함수 타입 자체 vs 호출 시그니처를 가진 객체

1. type Player = <T>(a: T[]) => T;

  • 제네릭 함수 타입 그 자체
  • Player는 함수 타입
    const playerFunc: Player = (a) => a[0]; 

2. type Player = { <T>(a: T[]): T }

  • 호출 시그니처를 가진 객체 타입
  • Player는 함수처럼 호출 가능한 객체
const playerFunc: Player = (a) => a[0];

두 방식은 사용 시엔 동일하게 동작함

but, 개념은 다름!

함수 타입 자체호출 시그니처를 가진 객체
type Player = <T>(a: T[]) => T;type Player = { <T>(a: T[]): T }
화살표 함수 형식객체 타입에 함수 호출 시그니처 포함
추가 속성 못 가짐추가 속성 가능
type A = <T>(a: T[]) => T;
const obj: A = () => {}; // obj.props = 123; // 속성 추가 못함

type A = {
	<T>(a: T[]): T;
    description: string;
}

const obj:A = Object.assign(a => a[0], {description: 'string'}); // 속성 추가 가능

궁금증
호출 시그니처를 가진 객체 문법을 이렇게는 가능한가?

type Player = { 
	<T>(a: T[]) => T
}

문법 오류!

객체 타입 내에서는 화살표 함수 문법을 사용할 수 없음.

0개의 댓글