
오늘은 타입을 미리 정하기 애매할 때 사용하는 타입에 대해 알아보도록 하겠습니다.
let members: (number | string)[] = [1, "2", 3];
let objects: { a: number | string } = { a: 123 };let nickname: any;
nickname = 123;
nickname = [];unknown 이라는 것도 있는데, any 와 유사하지만 any 보다 조금 더 안전한데, 아래와 같이 array 를 string 에 대입하려고 할 때 오류를 발생시킵니다. 반면에, any 는 오류가 발생하지 않습니다.
let nickname: unknown;
nickname = 123;
nickname = [];
let a: string = nickname; // 에러 발생
타입스크립트는 엄격한 언어입니다. 다음과 같이 union type 으로 지정했는데, 초기화를 해서 타입이 확정되지 않으면 에러가 발생합니다. string 이어도 +1 연산이 가능하고, number 이어도 +1 연산이 가능하기 때문입니다.
let age: string | number;
age + 1; // 에러 발생
let age: number | string = 1;
age + 1; // 정상
let age: string;
age + 1; // 정상
let age: number;
age + 1; // 정상
let age: unknown = 1;
age + 1; // 에러 발생
연습으로, 다음 변수 4개에 타입을 지정해봅시다. (단, age 변수엔 undefined 말고도 숫자도 들어올 수 있습니다.)
// 타입 지정 전
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 | undefined | number | boolean)[] = [user, age, married];
학교라는 변수에 타입도 지정해봅시다.
// 타입 지정 전
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];
unknown 타입인 변수를 조작하려면 내가 조작할 변수의 타입이 무엇인지 확실하게 체크하는 narrowing 또는 assertion 스킬을 사용해야 합니다. 이는 다음에 알아보도록 하겠습니다.
(본 포스팅은 코딩애플(Coding Apple)의 '빠르게 마스터하는 타입스크립트' 강의 내용을 바탕으로 학습하며 정리한 글입니다.)