11/ Type Inference

11/ Type Inference

목차

타입스크립트 정리 글은 이웅재님의 강의강의록을 참고하여 작성하였습니다. (짱짱)
오류가 있다면 언제든지 댓글 부탁드립니다.


1. 타입추론

  • 기본적으로 타입을 명시적으로 쓰지 않을 때 추론하는 방법에 대한 규칙
    • 명시적으로 쓰는 것은 타입 추론이 아니라 코드를 읽기 좋게 하는 지름길
  • let 은 기본적으로 우리가 아는 기본 자료형으로 추론
  • const 는 리터럴 타입으로 추론
    • 오브젝트 타입을 타입을 쓰지 않으면, 프로퍼티는 let 처럼 추론
      • const person = {name: ‘Mark’, age: 35}; 면
      • person => {name: string; age: number;} 로 추론
  • 대부분은 추론이 쉽다.
    • 단순 변수
    • structuring, destructuring
  • array, 함수의 리턴에서는 원하는데로 얻기가 힘들다.

2. 배열 타입 추론

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const array1 = [];
const array2 = ['a', 'b', 'c'];
const array3 = ['a', 1, false]; // 타입이 다를 경우 union타입으로 추론된다.

class Animal {
name: string;
}

class Dog extends Animal {
dog: string;
}

class Cat extends Animal {
cat: string;
}

const array4 = [new Dog(), new Cat()]

3. 리턴 타입 추론

1
2
3
4
5
6
7
function hello(message: string | number) {
if (message === 'world') {
return 'world';
} else {
return 0;
}
}

리터럴타입의 ‘world’이거나 0이 나온다.


4. 유니온 타입과 타입 가드

타입가드 Type guard

어떤 Scope에서 타입을 보증하는 런타임 체크를 수행하는 몇 가지 표현식이다. 타입 가드를 정의하기 위해서, 리턴 타입이 Type predicate인 함수를 정의 할 필요가 있다.

Type predicate

1
parameterName is Type
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
interface Person {
name: string;
age: number;
}

interface Car {
brand: string;
wheel: number;
}

function isPerson(arg: any): arg is Person {
return arg.name !== undefined;
}

function hello(arg: Person | Car) {
if (isPerson(arg)) {
console.log(arg.name);
// console.log(arg.brand);
} else {
// console.log(arg.name);
console.log(arg.brand);
}
}

참고링크

  1. https://infoscis.github.io/2017/06/19/TypeScript-handbook-advanced-types/
📚