타입 스크립트가 읽은 값을 바탕으로 추론을 수행하는 두 가지 핵심 개념으로, 코드 정보에 입각한 추론을 해낼 수 있다.
값에 허용된 타입을 두 개 이상의 가능한 타입으로 확장하는 것 ('이거 혹은 저거'와 같은 타입)
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 검사를 활성화할지 여부를 결정하는 타입스크립트 컴파일러 옵션 중 하나
자바스크립트에서 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 새로운 이름 = 타입 형태
type RawData = boolean : number : string : null : undefined;
let rawDataFirst: RawData;
let rawDataSecond: RawData;
let rawDataThird: RawData;
타입 별칭은 타입 애너테이션처럼 자바스크립트로 컴파일 되지 않는다.
따라서 앞서 다룬 코드 스니펫은 다음 자바스크립트로 컴파일 된다.
let rawDataFirst;
let rawDataSecond;
let rawDataThird;
=> 타입 별칭은 순전히 '개발 시'에만 존재