재밌고 어려운 IT를 이해해보자~!

기본타입 본문

TypeScirpt

기본타입

언제나즐거운IT 2024. 10. 5. 20:31

String

문자열

 

Number

숫자

 

Boolean

참/거짓 (true/false)

 

Null, Undefined

기본적으로 null과 undefined는 모든 타입의 하위 타입으로 number 같은 타입에 할당가능 하지만,
--strictNullChecks ( tsconfig.json 이나 jsconfig.json 파일에 설정하거나 기본적으로 VSCode 설정 탭에서 설정이 가능.)를 사용하게 되면 null과 undefined는 오직 any 타입과 각자 자신들 타입에만 할당 가능하다. (예외로 undefined는 void에 할당 가능)

// 이 밖에 이 변수들에 할당할 수 있는 값이 없어 사용하지 않는다.
let u: undefined = undefined;
let n: null = null;

let num: number | undefined;
let str: string | null;

strinctNullChecks 옵션을 설정하는 것을 항상 권장하기도 하며, 저렇게 유니온 타입을 통해 undefined와 null을 넣어주었다면 코드의 안정성을 위해 항상 체크를 해줘야 한다.


// 단순 체크
function doSomething(x: string | undefined) {
  if (x === undefined) {
    // 아무 것도 하지 않는다
  } else {
    console.log("Hello, " + x.toUpperCase());
  }
}

// 접미사(!) 사용
function liveDangerously(x?: number | undefined) {
  // 오류 없음
  console.log(x!.toFixed());
}
출처: https://mine-it-record.tistory.com/579?category=1282317 [나만의 기록들:티스토리]

저렇게 두 가지 방법이 있는데, 아래에 접미사 느낌표를 사용한 예제를 보면 코드가 참 간결해 보이겠지만, 저 느낌표는 해당 값은 null이나 undefined가 절대 들어올 리 없다 라는 것을 명시해주는 것이기 때문에 사실상 사용을 권장하지 않는다.

 

Void

보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 사용된다.

 

Never

-never 타입은 모든 타입에 할당 가능한 하위 타입이나, never타입에는 본인 외에 다른 타입이 할당될 수는 없다.
never 타입은 절대 발생할 수 없는 타입을 나타낸다.

가장 흔한 예제로는 에러를 발생시킬 때 사용된다.

특정  타입 값을 할당받지 않도록 하거나, 매개변수의 제한을 건는 곳들에 사용된다.

function fail(msg: string): never {
  throw new Error(msg);
}

 

Unknown, Any

any 타입은 모든 타입을 할당받을 수 있는 타입!

하지만 모든 타입을 할당받는다는 의미는 의도치 않은 형 변환이나 다른 타입의 값이 대입되는 등 여러 사이드 이펙트를 발생시킬 수 있다는 의미이다.
그리고 해당 타입의 메서드를 사용할 때 "타입 표명(type-assertion)"을 사용해서 사용해야 하기 때문에 사용할 때 유의하여야 한다. 
 
unknown 타입은 any처럼 모든 타입을 넣어도 상관없다라기보다는 "이 변수는 어떤 타입이 될지 모르니 네가 추론해줘"라는 의미이다.

 

모든 타입을 할당할 수 있다는 점은 any와 unknown 타입 둘 다 동일하나 분명한 차이점 역시 존재

// any 타입 변수 할당
let str: any = 'anything';
let test: string = str;

// unkown 타입 변수 할당
let str2: unknown = 'unknown';
//let test2: string = str2; // error : 'unknown' 형식은 'string' 형식에 할당할 수 없습니다.
let test2: string = (str2 as string);
str = str2;

 

any 타입은 다른 타입의 변수에도 할당이 가능

unknown 타입의 경우 any 타입을 제외한 나머지 타입 변수에는 타입 표명을 하지 않는 이상 할당이 불가능

 

 

Comments