* is
'is' 키워드의 역할은 타입 좁히기 즉 타입 가드인데 예제를 들어서 알아보자
위 예제에서 'test is string' 이 의마하는 것은 IsString 함수의 반환 형식에 boolean을 사용하는 대상이 호출 된 후 함수가 true를 반환하면 타입스크립트는 test의 타입을 string으로 좁힌다는 것을 의미한다 즉 tyof test의 값이 'string;일 겨ㅑㅇ우 test의 타입은 string으로 좁혀지는 것이다.
따라서 example 함수에서 foo라는 매개변수의 타입을 any로 지정했지만 타입 체커는 foo가 6번째 줄에 있는 if문 블록에서는 string 타입을 갖게되는 것이다
아래 예제도 is 키워드를 활용한 예제이다
살펴보면 getElementContent 함수의 매개변수로 받은 el은 If문에서 IsInputElement의 반환 값이 true이면 즉 el내의 value라는 프로퍼티가 존재한다면 el의 타입은 HTMLElement 가 아닌 HTMLInputElement이 된다.
그리고 if문 밖에서는 el은 HTMLElement 타입을 갖게 되는 것이다
as와 Is 키워드가 헷갈릴 수 있는데 as의 역할은 타입 단언이다 타입스크립트의 타입추론 기능은 매우 강력하지만 어쩔수 없는 한계가 존재하는데 이때 타입 단언을 사용하면 타입 체커가 실제 런타임에 존재할 변수의 타입과 다르게 추론하거나 너무 보수적인 추론을 하는 경우 프로그래머가 수동으로 타입 체커에게 타입에 대한 힌트를 주는 것이다
그에 반해 Is는 타입 가드이다 타입을 좁힐 때 사용하는 키워드인 것이다 타입가드는 타입 체커가 타입을 예측할 수 있도ㅓ록 타입을 좁혀 주어서 좀 더 안전하게 타입을 추론할 수 있게 해주는 것이다
'타입스크립트' 카테고리의 다른 글
[Typescript] - declare와 d.ts 파일 (0) | 2022.11.19 |
---|---|
[TypeScript] - tsconfig.json 분석 (0) | 2022.10.22 |
[TypeScript] - 함수 오버로딩 (0) | 2022.09.30 |
[Typescript] - const assertion ( + enum) (0) | 2022.09.15 |
[TypeScript] - 화살표 함수에서 제네릭 사용 방법 (0) | 2022.08.23 |