Post

타입스크립트 - 매개변수 타이핑

함수 매개변수

1
2
3
4
5
function example(a: string, b?: number, c = false) {}

example("hi", 123, true);
example("hi", 123);
example("hi");
  • a: 필수로 있어야하는 매개변수
  • b: ?, 있어도 되고 없어도 되고
  • c: 기본값으로 false 설정

나머지 매개변수

  • 나머지 매개변수는 ...문법을 사용한다.
  • 나머지 매개변수를 사용하는 매개변수는 항상 배열이나 튜플 타입이어야 한다.
  • 나머지 매개변수는 배열의 전개 문법과는 달리 매개변수의 마지막에만 위치해야한다.

사용방법

1
2
3
function example(a: string, ...b: number[]) {}

example123("hi", 1, 2, 3, 4);
  • 첫번째 매개변수에는 string 타입을, 나머지 매개변수는 number

나머지 매개변수는 마지막에만 위치해야 함

1
2
3
// Error!
// A rest parameter must be last in a parameter list.(1014)
function example(...a: string[], ...b: number[]) {}

매개변수 자리에 전개 문법을 사용할 수도 있다.

1
2
3
4
5
6
function example(...args: [number, string, boolean]) {}
example(2, "hi", false);
// function example(args_0: number, args_1: string, args_2: boolean): void

function example1(...args: [a: number, b: string, c: boolean]) {}
// function example1(a: number, b: string, c: boolean): void

매개변수에 구조분해 할당을 적용할 수 있다.

1
2
3
function destructuring({ props: { nested } }: { props: { nested: string } }) {}

destructuring({ props: { nested: "hello world" } });

함수 내부에서 this 사용하는 경우 명시적으로 표기해야 한다.

명시적으로 표기하지 않으면 any로 추론되어 에러가 발생한다.

1
2
3
4
5
// Error!
// 'this' implicitly has type 'any' because it does not have a type annotation.(2683)
function example() {
  console.log(this);
}
1
2
3
4
5
6
7
8
9
function example(this: Document, a: string, b: "this") {}

// Error!
// The 'this' context of type 'void' is not assignable to method's 'this' of type 'Document'
// this가 Document 타입일 수 없음을 알고 있어서 에러가 발생함
example("hello", "this");

// all과 같은 메서드를 사용해 this의 값을 document로 지정해주어야 한다.
example.call(document, "hello", "this");

메서드에서도 this를 사용할 수 있다.

일반적으로는 this 메서드를 갖고 있는 객체 자신으로 추론되기 때문에 this를 명시적으로 작성할 필요 없음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type Animal43 = {
  age: number;
  type: "dog";
};
const person = {
  name: "hyemin",
  age: 28,
  sayName() {
    this;
    // 객체 자기 자신
    // this: {
    //     name: string;
    //     age: number;
    //     sayName(): void;
    //     sayAge(this: Animal43): void;
    // }
    this.name;
  },
  sayAge(this: Animal43) {
    this; // this: Animal
    this.type;
  }
};
This post is licensed under CC BY 4.0 by the author.