Typescript에 대한 메모 - 1

tyange·2023년 8월 23일

제네릭 타입은 '선언' 시점에 타입 정의를 내리는 것이 아니라 '사용' 시점에 내리는 것을 의미한다.
전달받은 인자를 그대로 반환하는 타입스크립트 함수가 있다고 가정할 때, 보통은 전달받은 인자의 타입을 정확히 명시하는 쪽으로 코드를 작성하게 될 것이다.

function getArgs(args: string): string {
	return args;
}

위 코드는 전달받은 인자의 타입이 문자열(string)일 때만 유효하다. 아래처럼 쓸 경우 에러가 난다.

const number = getArgs(0); // 에러!

전달받은 인자의 타입에 관계 없이 작동하는 함수를 만들고 싶다면 어떻게 해야할까?

function getArgs<T>(args: T): T {
	return args;
}

위의 코드와 같이 선언된 타입스크립트 함수는, 아래처럼 사용될 수 있다. 아래의 코드를 풀어서 설명하자면, 첫째 줄의 getArgs<string>은 우리는 getArgs 함수의 인자로 string 타입의 변수를 넘길 거라는 걸 의미한다. 둘째 줄도 마찬가지로 함수의 인자로 number 타입의 변수를 넘긴다고, 사용 시점에서야 넘겨줄 인자의 타입을 정의하는 것이다.

const text = getArgs<string>('hi'); // text는 'hi'다.
const number = getArgs<number>(0); // number는 0이다.

타입스크립트는 똑똑해서, 타입 추론을 잘하므로 아래처럼 제네릭을 생략하고 쓸 수도 있다.

const text = getArgs('hi'); // text는 'hi'다. 자동으로 string 타입으로 추론되었다.
const number = getArgs(0); // number는 0이다. 자동으로 number 타입으로 추론되었다.
profile
아주 흐린 날의 기록

0개의 댓글