본문 바로가기
TYPESCRIPT

기본 타입

by olbiizl_ 2024. 6. 5.

불리언(Boolean)

참(true) / 거짓(false)

let isDone: boolean = false;

숫자(Number)

let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744

모든 숫자는 부동 소수 값이다.

 


문자열(String)

let color: string = "blue";
color = 'red';
  • 템플릿 문자열을 사용하면 여러 줄에 걸쳐 문자열 작성 가능 백틱()`
  • 표현식을 포함시킬 수 있다. ${ expr }
let fullName: string = `Hyerin lee`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.
I'll be ${age + 1} years old next month.`;

배열(Array)

  1. 타입 뒤에 [] 를 쓰는 방법
let list: number[] = [1, 2, 3];
  1. 제너릭 배열 타입을 쓰는 것 Array<elemType>
let list: Array<number> = [1, 2, 3];

 


튜플(Tuple)

튜플 타입을 사용하면 요소의 타입과 개수가 고정된 배열을 표현할 수 있다.

  • 단, 요소들의 타입이 모두 같을 필요는 없다.
// 튜플 타입으로 선언
let x: [string, number];

// 초기화
x = ["hello", 10]; // 성공

// 잘못된 초기화
x = [10, "hello"]; // 오류
  • 정해진 인덱스에 위치한 요소에 접근하면 해당 타입이 나타난다.
console.log(x[0].substring(1)); // 성공
console.log(x[1].substring(1)); // 오류, 'number'에는 'substring' 이 없습니다.
  • 정해진 인덱스 외에 다른 인덱스에 있는 요소에 접근하면, 오류 발생 실패
x[3] = "world"; // 오류, '[string, number]' 타입에는 프로퍼티 '3'이 없습니다.

console.log(x[5].toString()); // '[string, number]' 타입에는 프로퍼티 '5'가 없습니다.

 


열거(Enum)

enum은 값의 집합에 더 나은 이름을 붙여줄 수 있다.

enum Color {Red, Green, Blue}
let c: Color = Color.green;
  • enum은 0부터 시작하여 멤버들의 번호를 매긴다.
  • 멤버 중 하나의 값을 수동으로 설정하거나, 모든 값을 수동으로 설정해 번호를 바꿀 수 있다.
// 인덱스를 0이 아닌 1부터 시작할 수 있게 함

enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;

// 모든 값을 수동
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
  • 매겨진 값을 사용해 enum 멤버의 이름을 알아낼 수 있다.
  • 예를 들어, 위의 예제에서 2라는 값이 어떤 Color enum 멤버와 매칭되는지 알 수 없을 때, 이에 일치하는 이름을 알아낼 수 있다.
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];

console.log(colorName); // 값이 2인 'Green'이 출력됩니다

Any

타입검사를 하지 않고, 그 값들이 컴파일 시간에 검사를 통과하길 원할 때 사용하는 타입

  • 타입의 일부만 알고 전체는 알지 못할 때 유용
let list: any[] = [1, true, "free"];

list[1] = 100;

Void

any의 반대 타입 : 어떤 타입도 존재할 수 없음

  • void는 보통 함수에서 반환 값이 없을 때 반환 타입을 표현하기 위해 쓰이는 것
function warnUser(): void {
    console.log("This is my warning message");
}
  • void를 타입 변수를 선언하는 것은 유용하지 않다.
    • 왜? 그 변수에는 null을 사용하지 않을 때만 해당

Null and Undefined

// 이 밖에 이 변수들에 할당할 수 있는 값이 없습니다!
let u: undefined = undefined;
let n: null = null;

Never

  • 절대 발생할 수 없는 타입
  • 함수 표현식이나 화살표 함수 표현식에서 항상 오류를 발생시키거나 절대 반환하지 않는 반환 타입으로 쓰인다.
  • 변수 또한 타입 가드에 의해 아무 타입도 얻지 못하게 좁혀지면 never 타입을 얻게 될 수 있다.
// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function error(message: string): never {
    throw new Error(message);
}

// 반환 타입이 never로 추론된다.
function fail() {
    return error("Something failed");
}

// never를 반환하는 함수는 함수의 마지막에 도달할 수 없다.
function infiniteLoop(): never {
    while (true) {
    }
}

객체(Object)

  • 원시타입이 아닌 타입
  • 예를 들어, number, string, boolean, bigint, symbol, null, undefined가 아닌 나머지
declare function create(o: object | null): void;

create({ prop: 0 }); // 성공
create(null); // 성공

create(42); // 오류
create("string"); // 오류
create(false); // 오류
create(undefined); // 오류

타입 단언(Type assertions)

  • 가끔 TS보다 개발자가 값에 대해 더 잘 알고 있을 때가 있음
  • 대개, 이런 경우는 어떤 엔티티의 실제 타입이 현재 타입보다 더 구체적일 때 발생
  • 타입 단언은 컴파일러에게 ‘날 믿어, 난 내가 뭘 하고 있는지 알아’라고 말해주는 방법
  • 다른 언어의 타입 변환(형 변환)과 유사하지만, 다른 특별한 검사나 데이터 재구성은 안함
  • 이는 런타임에 영향을 안 미치고, 온전히 컴파일러만 이를 사용
  • 타입스크립트는 개발자가 필요한 어떤 특정 검사를 수행했다고 인지
  1. angle-bracket 문
let someValue: any = "this is a string"; 
let strLength: number = (<string>someValue).length;

 

   2. as-문

let someValue: any = "this is a string"; 
let strLength: number = (someValue as string).length;
반응형