타입을 확실히 해야하는 타입스크립트에서 타입을 미리 정하기 애매한 경우가 있다
OR 연산자 같은 느낌으로 사용하는 것이다
let name: string | number = 'kim';
let age: (string | number) = 100;
괄호는 쳐도 되고 생략해도 된다!
name, age 변수엔 string 또는 number만 들어올 수 있게 된다
그리고 할당하는 순간 타입은 둘 중 하나로 변한다
아래처럼 하면 됨 !
var array: (number|string)[] = [1,'2',3]
var obj: {data : (number|string)} = { data : '123' }
변수에 정의된 Union 타입은 할당과 동시에 OR 역할이 사라지지만
array, object에 정의된 Union 타입은 OR 연산자가 유지된다
(요즘 타입스크립트는 unknown 타입을 사용한다고 한다)
아무거나 넣어도 되는 타입이다 (타입실드 해제 문법) -> 모든 자료형 허용해주는 것이 타입스크립트의 장점이다
(any에서는 괜찮음)
let 이름: unknown;
let 변수1: string = 이름;
let 변수2: boolean = 이름;
let 변수3: number = 이름;
(any에서는 괜찮음)
let 이름: unknown;
이름[0];
이름 - 1;
이름.data;
타입스크립트는 정확하고 확실한걸 좋아하기 때문에
확실하지않은 타입에 뺄셈해주는 등의 연산에서는 에러가 난다
//practice1
let user: string = "kim";
let age: number | undefined = undefined;
let married: boolean = false;
let 철수: (string | number | undefined | boolean)[] = [user, age, married];
//practice2
let 학교: {
score: (number | boolean)[];
teacher: string;
friend: string | string[];
} = {
score: [100, 97, 84],
teacher: "Phil",
friend: "John",
};
학교.score[4] = false;
학교.friend = ["Lee", 학교.teacher];