Back to Posts
2017년 11월 27일
11/ Type Inference
타입스크립트 정리 글은 이웅재님의 강의 와 강의록 을 참고하여 작성하였습니다. (짱짱) 오류가 있다면 언제든지 댓글 부탁드립니다.
1. 타입추론
- 기본적으로 타입을 명시적으로 쓰지 않을 때 추론하는 방법에 대한 규칙
- 명시적으로 쓰는 것은 타입 추론이 아니라
코드를 읽기 좋게 하는 지름길
- 명시적으로 쓰는 것은 타입 추론이 아니라
- let 은 기본적으로 우리가 아는 기본 자료형으로 추론
- const 는
리터럴 타입으로 추론- 오브젝트 타입을 타입을 쓰지 않으면, 프로퍼티는 let 처럼 추론
- const person = {name : ‘Mark’, age: 35}; 면
- person => {name : string; age: number;} 로 추론
- 오브젝트 타입을 타입을 쓰지 않으면, 프로퍼티는 let 처럼 추론
- 대부분은 추론이 쉽다.
- 단순 변수
- structuring, destructuring
- array, 함수의 리턴에서는 원하는데로 얻기가 힘들다.
2. 배열 타입 추론
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. 리턴 타입 추론
function hello(message: string | number) {
if (message === 'world') {
return 'world';
} else {
return 0;
}
}리터럴타입의 ‘world’이거나 0이 나온다.
4. 유니온 타입과 타입 가드
타입가드 Type guard
어떤 Scope에서 타입을 보증하는 런타임 체크를 수행하는 몇 가지 표현식이다. 타입 가드를 정의하기
위해서, 리턴 타입이 Type predicate인 함수를 정의 할 필요가 있다.
Type predicate
parameterName is Typeinterface 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);
}
}참고링크
Related
2018년 12월 9일
2018년 11월 25일
2017년 11월 28일
2017년 11월 26일
2017년 11월 25일