재밌고 어려운 IT를 이해해보자~!
타입추론(Type Inference), 타입표명(Type Assertion) 본문
Type Inference
타입 추론이란 TypeScript에서 명시적인 타입 표기가 없을 때 타입 정보를 제공하기 위해 사용되는 것이다.
그냥 쉽게 말하면 자동으로 타입을 결정해주는 것이라고 보면 된다.
let x = 3; // let x: number
let y = "4"; // let y: string
javascript처럼 사용하면 typescript는 자동적으로 타입을 추론하여 알맞은 타입을 결정한다.
여러 타입을 동시에 사용할 경우 최적 공통 타입을 알아서 계산
let x = [0, 1, null]; // let x: (number | null)[]
이런 식으로 타입 스크립트는 자동으로 타입을 결정지어 주지만 아무래도 타입 스크립트를 선택해서 사용하는 입장에서는 제대로 명시해서 사용해 주는 게 좋다.
Type Assertion
타입 표명 또는 타입 단언이라 불리는 Type Assertion은 타입을 강제적으로 지정해 주는 것을 말한다.
여기서 타입 캐스팅과 다르다는 점을 인식하고 있어야 한다.
function getData(): any {
return "3";
}
const result = getData();
(result as string).length;
any라는 타입을 string 타입으로 변환해 사용하는 것
let x = "1";
// error: 'string' 형식을 'number' 형식으로 변환한 작업은 실수일 수 있습니다.
// 두 형식이 서로 충분히 겹치지 않기 때문입니다.
// 의도적으로 변환한 경우에는 먼저 'unknown'으로 식을 변환합니다.
let y: number = x as number;
let z: number = (<any>x) as number;
위 예제를 보면 y 변수에서 에러가 발생했는데,
이 Type Assertion를 사용하는 규칙은 "보다 구체적인 또는 덜 구체적인" 버전의 타입으로 변환하는 행위만 허용된다.
쉽게 말하자면 결국 저런 식의 y변수를 해결하려면 any 나 unknown으로 먼저 변환한 다음에 다시 한번 변환을 시켜줘야 한다는 의미이다. 마치 z 변수처럼!
결론은 그냥 타입 추론이든 타입 표명이든 웬만하면 사용하지 않는게 좋다.
'TypeScirpt' 카테고리의 다른 글
Type VS Interface (0) | 2024.10.10 |
---|---|
클래스(Class) (0) | 2024.10.08 |
열거형(Enums) (0) | 2024.10.07 |
타입 별칭과 문자열 리터럴 (Type Alias, String Literal) (0) | 2024.10.06 |
객체타입 - object, array, tupple (0) | 2024.10.06 |
Comments