타입스크립트, 타입 미리 정하기 어려울 때, union type, any, unknown

라용·2022년 10월 18일
0

코딩애플 타입스크립트 강의를 보고 정리한 내용입니다. 더 자세하고 친절한 설명은 해당 강의를 참고하세요.

Union type

변수에 들어오는 값이 string 일지 number 일지 애매하다면 Union type 을 사용합니다.

let userName: string | number = 'kim';
let userAge: (string | number) = 100;

배열이나 객체라면 아래처럼 넣을 수 있습니다.

let Array: (number | string)[] = [1,'2',3]
let Object: {data : (number | string) } = { data : '123' }

변수에 정의된 Union 타입은 할당하면서 OR 역할이 사라지고, 배열과 객체에 정의된 Union 타입은 OR 연산자가 유지됩니다.

any

any 타입은 실드 자체를 해제해서 아무 자료나 넣을 수 있는 타입입니다. 때문에 타입관련 버그를 추적할 수 없으므로 비상시 변수 타입 해제 용도로 쓰입니다.

let user: any = 'kim';

user = 123;
user = undefined;
user = [];

unknown

any 와 비슷하지만 해당 변수를 다른 곳에 할당할 때 에러가 나는 점이 any 와 다릅니다.

let name: unknown;

let userName: string = name;
let isUser: boolean = name;
let userAge: number = name;

// 아래 경우도 에러 (any 는 다르고)

name[0];
name - 1;
name.data;

타입스크립트는 확실한 타입이 아니면 연산을 하거나 접근할 시 에러가 납니다. 아래처럼 union type 의 경우도 에러가 납니다. (값 할당은 가능하지만 사용할 경우에는 number 로 타입 지정된 상태가 아니기 때문에)

let Age: string|number;
Age + 1; 

이렇게 타입스크립트는 타입을 확실하게 검사합니다.

// 아래 코드는 오류가 납니다.

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

// 아래 처럼 타입을 지정해주어야 합니다.
// 선언 이후 할당할 때도 해당 타입에 맞게 넣어주지 않으면 에러 발생

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

0개의 댓글