윤시의 블로그

[TypeScript] union, any, unknown 타입 본문

TypeScript

[TypeScript] union, any, unknown 타입

yo09 2025. 1. 5. 23:13

1. Union Type

string 또는 number와 같이 다양한 타입을 허용하고 싶다면, | 연산자로 정의한다.
변수의 타입은 할당 시점에 하나로 좁혀진다.

let 이름 : string | number = "kim";
let 나이 : (string | number) = 100;

//Array와 Object에도 적용
var 어레이 : (number | string)[] = [1,"2", 3];
var 오브젝트 : {data : number | string} = { data : "123");

 

2. any 타입

어떤 자료든 할당 가능, 타입체크 해제
남발하면 타입 안정성이 떨어짐

let 이름 : any = "kim";
이름 = 123;
이름 = [];



3. unknown 타입

any와 비슷하지만 더 안전한 타입
unknown 타입은 그대로 유지되며, 연산/조작하려면 narrowing(타입 좁히기) 또는 assertion(타입 단언) 필요

let 이름 : unknown = "kim";
이름  = 123;

//아래처럼 조작 시 에러 발생
let 변수 : string = 이름;

 

연산 시 에러

• string | number 변수로 연산 불가
: 이유는 타입스크립트는 “확실한 타입”만 허용하기 때문.
string | number는 Union 타입으로, string 또는 number 중 하나가 할당될 수 있음. 하지만, 타입스크립트는 실행 전 정확한 타입을 보장하고자 하기 때문에, 어떤 타입이 실제로 할당될지 확신할 수 없는 상태에서는 연산 허용X

let 나이 : string | number;
나이 + 1; //에러 발생

 

unknown 타입 변수로 연산 불가

unknown 타입은 모든 값이 할당될 수 있는 타입으로, 아직 타입이 확정되지 않은 상태를 의미함. 타입스크립트에서는 unkown 타입이 정확히 어떤 타입인지 알지 못하기 때문에, 연산을 수행하려 할 때 타입이 확실하지 않다는 이유로 에러를 발생시킴

let 나이 : unknown = 1;
나이 + 1; // 에러 발생



연습문제
1. 다음 변수 4개에 타입을 지정해보기
(age 변수엔 숫자도 들어올 수 있음)

let user = 'kim';
let age = undefined;
let married = false; 
let 철수 = [user, age, married];



// 풀이

let user : string = 'kim';
let age : undefined | number = undefined;
let married : boolean = false;
let 철수 : (string|number|undefined|boolean)[] = [user, age, married];



2. 학교라는 변수에 타입 지정해보기

let 학교 = {
    score : [100, 97, 84],
    teacher : 'Phil',
    friend : 'John'
}
학교.score[4] = false;
학교.friend = ['Lee' , 학교.teacher]



//풀이

let 학교 : {
score : (number | boolean)[],
teacher : string,
friend : string | string[]
}
= {
    score : [100, 97, 84],
    teacher : 'Phil',
    friend : 'John'
}
학교.score[4] = false;
학교.friend = ['Lee', 학교.teacher]