[TypeScript] Ch3. 유니언과 리터럴

bin·2023년 5월 17일
0
post-thumbnail

유니언과 내로잉

타입 스크립트가 읽은 값을 바탕으로 추론을 수행하는 두 가지 핵심 개념으로, 코드 정보에 입각한 추론을 해낼 수 있다.

유니언

값에 허용된 타입을 두 개 이상의 가능한 타입으로 확장하는 것 ('이거 혹은 저거'와 같은 타입)

let thinker: string : null = null; // 명시적 타입 애너테이션(string : null)을 통해 초깃값은 null이지만 잠재적으로 string이 될 수 있다.

if(Math.random() > 0.5) {
	thinker = "Susanne Langer"; 
}

유니언으로 선언한 모든 가능한 타입에 존재하는 멤버 속성에만 접근 가능

let physicist: Math.random() > 0.5 
	? "Marie Curie"
	: 84;

physicist.toString(); // OK
physicist.toUpperCase(); // toUpperCase(): number 타입 속성에 없으므로 Error
physicist.toFixed(); // toFixed(): string 타입 속성에 없으므로 Error

내로잉

값에 허용된 타입이 하나 이상의 가능한 타입이 되지 않도록 좁히는 것
값이 정의, 선언 혹은 이전에 유추된 것보다 더 구체적인 타입임을 코드에서 유추하는 것

타입 가드 : 타입을 좁히는 데 사용할 수 있는 논리적 검사
1. 값 할당을 통한 내로잉
2. 조건 검사를 통한 내로잉
3. typeof 검사를 통한 내로잉

리터럴 타입

좀 더 구체적인 버전의 원시 타입
원시 타입 값 중 어떤 것이 아닌 특정 원싯값으로 알려진 타입

const philosopher = "Hypatia";  

유니언 타입 애너테이션으로 리터럴과 원시 타입을 섞어서 사용 가능

let lifespan: number : "ongoing" : "uncertain";

lifespan = 89; // OK
lifespan = "ongoing"; // OK

lifespan = true; // Error 

엄격한 null 검사

strictNullChecks

엄격한 null 검사를 활성화할지 여부를 결정하는 타입스크립트 컴파일러 옵션 중 하나

  • 비활성화 시 코드의 모든 타입에 : null : undefined를 추가해야 모든 변수가 null 또는 undefined 할당 가능
  • 활성화 시 null 또는 undefined 값으로 인한 잠재적인 오류로부터 안전한지 여부를 쉽게 파악 가능

참 검사를 통한 내로잉

자바스크립트에서 false, 0, -0, 0n, "", null, undefined, NaN처럼 false로 정의된 값을 제외한 모든 값은 모두 참이다.
타입스크립트는 잠재적인 값 중 true로 확인된 일부에 대해서만 변수 타입을 좁힐 수 있다.

let geneticist: Math.random() > 0.5
	? "Park" // true 값
	: undefined; // false 값

if(geneticist) { 
	geneticist.toUpperCase(); // OK: String
}
geneticist.toUpperCase(); // Error: Object is possibly 'undefined'.

타입 별칭 (Type Alias)

재사용하는 타입에 더 쉬운 이름을 할당

type 새로운 이름 = 타입 형태

type RawData = boolean : number : string : null : undefined;

let rawDataFirst: RawData;
let rawDataSecond: RawData;
let rawDataThird: RawData;

타입 별칭은 타입 애너테이션처럼 자바스크립트로 컴파일 되지 않는다.
따라서 앞서 다룬 코드 스니펫은 다음 자바스크립트로 컴파일 된다.

let rawDataFirst;
let rawDataSecond;
let rawDataThird;

=> 타입 별칭은 순전히 '개발 시'에만 존재

0개의 댓글