any 타입
- TypeScript에서 any 타입은 모든 타입의 슈퍼 타입
- 이는 어떤 타입의 값이든 저장할 수 있다는 의미
- JavaScript의 object 타입과 같은 최상위 타입
let anything: any;
anything = 5; // 최초에는 숫자를 넣었지만
anything = 'Hello'; // 문자열도 들어가고요
anything = { id: 1, name: 'John' }; // JSON도 들어가네요
프로그램의 안정성을 위해서 타입스크립트에서 가급적 any를 쓰지 않는 것이 좋음
unknown 타입
- unknown 타입은 any 타입과 비슷한 역할을 하지만 더 안전한 방식으로 동작
- unknown 타입의 변수에도 모든 타입의 값을 저장할 수 있다.
- 하지만, 그 값을 다른 타입의 변수에 할당하려면 명시적으로 타입을 확인해야 함.
let unknownValue: unknown = '나는 문자열이지롱!';
console.log(unknownValue); // 나는 문자열이지롱!
let stringValue: string;
stringValue = unknownValue; // 에러 발생! unknownValue가 string임이 보장이 안되기 때문!
stringValue = unknownValue as string;
console.log(stringValue); // 나는 문자열이지롱!
- stringValue = unknownValue as string; 코드를 **Type Assertion(타입 단언)**이라고 한다.
- unkwown 타입의 변수를 다른 곳에서 사용하려면 타입 단언을 통해 타입 보장을 하여 사용할 수 있음.
let unknownValue: unknown = '나는 문자열이지롱!';
let stringValue: string;
if (typeof unknownValue === 'string') {
stringValue = unknownValue;
console.log('unknownValue는 문자열이네요~');
} else {
console.log('unknownValue는 문자열이 아니었습니다~');
}
또한, typeof 키워드를 이용하여도 타입 체크를 미리한 후 unknown 타입의 변수를 string 타입의 변수에 할당할 수 있음.
unknown 의 한계
- unknown 타입이 그나마 재할당을 할 때 타입 체크가 되어서 안전함을 보장한다.
- 하지만, unknown 타입도 결국 재할당이 일어나지 않으면 타입 안전성이 보장이 되지 않음.
union
union은 여러타입중 하나를 가질 수 있는 변수를 선언할 때 사용됨. union은 | 연산자를 사용해 여러 타입을 결합하여 표현
type StringOrNumber = string | number; // 원한다면 | boolean 이런식으로 타입 추가가 가능해요!
function processValue(value: StringOrNumber) {
if (typeof value === 'string') {
// value는 여기서 string 타입으로 간주됩니다.
console.log('String value:', value);
} else if (typeof value === 'number') {
// value는 여기서 number 타입으로 간주되구요!
console.log('Number value:', value);
}
}
processValue('Hello');
processValue(42);
기억해야 할 것
- TypeScript를 쓰면서 여러 타입을 하나의 변수로 해결하겠다는 생각은 가급적 지양
- 이런 사소한 습관들이 코드의 안정성을 높이고 유지 보수성을 개선할 수 있다는 것을 명심해야한다.
'TypeScript' 카테고리의 다른 글
[TypeScript] 유틸리티 타입 (2) | 2023.07.26 |
---|---|
[TypeScript] enum 과 object literal 비교 (0) | 2023.07.26 |
[TypeScript] const, readonly (0) | 2023.07.25 |
[TypeScript] 기본 타입 익히기 (0) | 2023.07.25 |
[TypeScript] JavaScript 라이브러리를 TypeScript 에서 사용하기 (0) | 2023.07.25 |