Typescript
[타입스크립트] Unknown, Object , Null, Undefined
*히아*
2022. 4. 6. 16:16
Unknown
Unknown은 Any와 같이 최상위 타입이다. 하지만 Unknown에 다른 타입의 값 할당은 가능하지만 Unknown을 다른 타입에는 불가!
=> Unknown이라는 그릇에는 다양한 타입을 담을 수 있지만! 다른 특정 타입 그릇에(any 빼고) Unknown 타입을 담을 수 없다!!
*** 최상위 타입이란?
어떤 타입의 값도 할당할 수 있는 타입!
*** Unknown은 타입 단언(Assertions)이나 타입 가드(Guards)가 필요로 하다.
let a: any = 123;
let u: unknown = 123;
let v1: boolean = a; // 모든 타입(any)은 어디든 할당할 수 있습니다.
let v2: number = u; // 알 수 없는 타입(unknown)은 모든 타입(any)을 제외한 다른 타입에 할당할 수 없습니다.
let v3: any = u; // OK!
let v4: number = u as number; // 타입을 단언하면 할당할 수 있습니다.
언제 사용할까?
=> 다양한 타입을 반환할 수 있는 API에서 사용된다!
Object
*** 컴파일러 옵션에서 엄격한 타입 검사(strict)를 true로 설정하면 null은 포함되지 않는다.
=> 객체에는 null값을 넣을 수 있지만 엄격한 타입 검사를 하면 null을 미포함 시킬 수 있다.
let obj: object = {};
let arr: object = [];
let func: object = function () {};
let nullValue: object = null;
let date: object = new Date();
// ...
객체는 여러 타입의 상위 타입이다. 따라서 하위 타입들이 어떠한 타입인지 불명확할 수 있다
=> 보다 저확하게 타입 지정을 위해서는 객체 속성들에 대해 미리 지정해줄 수 있따!!
let userA: { name: string, age: number } = {
name: 'HEROPY',
age: 123
};
let userB: { name: string, age: number } = {
name: 'HEROPY',
age: false, // Error
email: 'thesecon@gmail.com' // Error
};
객체를 반복적으로 사용하기 위해서는 interface나 type사용을 추천!
interface IUser {
name: string,
age: number
}
let userA: IUser = {
name: 'HEROPY',
age: 123
};
let userB: IUser = {
name: 'HEROPY',
age: false, // Error
email: 'thesecon@gmail.com' // Error
};
Null과 Undefined
unKnown과 달리 null과 undefined는 모든 타입의 하위 타입이다
let num: number = undefined;
let str: string = null;
let obj: { a: 1, b: false } = undefined;
let arr: any[] = null;
let und: undefined = null;
let nul: null = undefined;
let voi: void = null;
// ...
*** 컴파일 옵션 "strictNullChecks" : true 를 통해 엄격하게 Null과 Undefined 서로의 타입까지 더 이상 할당할 수 없게 만들 수 있다.
*** void에는 undefined 할당 가능
let voi: void = undefined; // ok
출처
goorm
구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.
www.goorm.io