Post

타입스크립트 일반 함수와 화살표 함수에서 타입 다루기

함수 정의 시 타입을 명시하는 것은 코드의 가독성과 오류 방지에 큰 도움이 됩니다. 이 글에서는 타입스크립트에서 일반 함수와 화살표 함수에서 타입을 다루는 방법에 대해 설명합니다.

1. 일반 함수에서 타입 다루기

일반 함수는 function 키워드를 사용하여 정의됩니다. 타입스크립트에서는 함수의 매개변수와 반환값에 대해 타입을 지정할 수 있습니다.

1.1. 함수 매개변수 타입 지정

일반 함수의 매개변수에 타입을 지정하는 방법은 다음과 같습니다:

1
2
3
4
5
6
function greet(name: string): string {
  return `안녕! ${name}야!`;
}

const greeting = greet("철수");
console.log(greeting);  // 출력: 안녕! 철수야!

위 코드에서 greet 함수는 name 매개변수를 string 타입으로 받으며, 반환 타입도 string으로 지정하였습니다.

1.2. 함수 반환 타입 지정

반환 타입을 지정함으로써 함수가 올바른 타입의 값을 반환하도록 강제할 수 있습니다:

1
2
3
4
5
6
function add(a: number, b: number): number {
  return a + b;
}

const sum = add(5, 10);
console.log(sum);  // 출력: 15

add 함수는 두 개의 number 타입 매개변수를 받아 number 타입을 반환합니다. 반환 타입을 명시하지 않으면 타입스크립트가 자동으로 추론하지만, 명시적으로 지정하는 것이 더 명확합니다.

2. 화살표 함수에서 타입 다루기

화살표 함수는 ES6에서 도입된 문법입니다. 화살표 함수에서도 매개변수와 반환값에 대해 타입을 지정할 수 있습니다.

2.1. 매개변수 타입 지정

화살표 함수에서 매개변수의 타입을 지정하는 방법은 다음과 같습니다:

1
2
3
4
5
6
const multiply = (x: number, y: number): number => {
  return x * y;
}

const result = multiply(4, 5);
console.log(result);  // 출력: 20

위 코드에서 multiply 함수는 두 개의 number 타입 매개변수를 받고, number 타입을 반환합니다.

2.2. 반환 타입 추론

반환 타입을 생략해도 타입스크립트는 자동으로 반환 타입을 추론합니다:

1
2
3
4
const subtract = (a: number, b: number) => a - b;

const difference = subtract(10, 4);
console.log(difference);  // 출력: 6

타입스크립트는 subtract 함수의 반환 타입을 number로 추론합니다. 그러나 코드의 명확성을 위해 반환 타입을 명시하는 것이 좋습니다.

3. 복잡한 타입 다루기

타입스크립트에서는 제네릭과 같은 복잡한 타입을 사용하여 더 유연하고 강력한 타입 검사를 수행할 수 있습니다.

3.1. 제네릭 함수

제네릭 함수를 사용하면 다양한 타입에서 유연하게 동작하도록 할 수 있습니다.

1
2
3
4
5
6
7
8
9
function getArray<T>(items: T[]): T[] {
  return new Array<T>().concat(items);
}

const numberArray = getArray<number>([1, 2, 3, 4]);
const stringArray = getArray<string>(["a", "b", "c", "d"]);

console.log(numberArray);  // 출력: [1, 2, 3, 4]
console.log(stringArray);  // 출력: ["a", "b", "c", "d"]

제네릭 타입 T를 사용하여 함수가 다양한 타입의 배열을 처리할 수 있습니다. getArray 함수는 입력 배열과 동일한 타입의 배열을 반환합니다.

3.2. 인터페이스와 타입 앨리어스

인터페이스와 타입 앨리어스를 사용하여 복잡한 객체 타입을 정의하고 함수의 매개변수로 사용할 수 있습니다:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
interface User {
  name: string;
  age: number;
  email: string;
}

const createUser = (user: User): string => {
  return `유저 ${user.name}가 생성되었습니다.`;
}

const newUser = {
  name: "지수",
  age: 28,
  email: "jisu@gmail.com"
};

console.log(createUser(newUser));  // 출력: 유저 지수가 생성되었습니다.

4. 결론

일반 함수와 화살표 함수 모두 매개변수와 반환 타입을 명시적으로 지정함으로써 컴파일 타임에 오류를 방지하고, 유지보수가 용이한 코드를 작성할 수 있습니다. 또한, 제네릭과 인터페이스를 이용하면 더 유연하게 사용할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.