[TypeScript] 타입 종류

hello__0·2022년 8월 5일
0

타입추론

타입추론은 원시값 (불변한, 객체가 아닌 값들)자체에서 타입을 따로 지정하지 않아도 타입이 지정되는 것

  • 변수를 선언하거나 초기화 할 때
  • 변수, 속성, 인자의 기본 값, 함수의 바노한 값 등을 설정할 때
const str = 'string';
const num = 456;
const bool = true;

객체타입

const obj: {
  str: string;
  num: number;
  student: {
    str: string;
    num: number;
  };
} = {
  str: "str",
  num: 456,
  student: {
    str: "str",
    num: 456,
  },
};

console.log(obj.str);

함수타입

매개변수와 반환되는 값(void)의 타입을 지정할 수 있다.

function func(num: number, str: string): string {
    return num + str;
}

func(123, 'str');

반환되는 값의 타입이 유추가 잘 되기 때문에 무조건 반환타입을 넣어야 할 필요는 없다.
넣지 않는다고 해서 오류가 나지는 않는다.

const func = (str1: string, str2: string) => {
    return str1 + ' ' + str2;
}

func('hello', 'world');

인수와 반환되는 값의 타입이 다를 때

function func(num1: number, num2: string): number {
    return num1 + Number(num2);
}

func(456, '456');

반환되는 값이 없을 때

function func(num1: number, num2: string): void {
    console.log(num1 + num2);
}

func(456, '456');

함수와 객체

const func = (obj: { str1: string, str2: string }) => {
    return obj.str1 + ' ' + obj.str2;
}

func({ str1: 'hello', str2: 'world' });

배열타입

const Arr: string[] = ['str', 'str2', 'str3'];

const Arr1: Array<string> = ['str', 'str2', 'str3'];

const numArr: Array<number> = [4, 5, 6];

const boolArr: boolean[] = [false, true, false, true];

string[ ] 방식과 Array<string> 방식 둘 다 쓰인다.


리터럴 타입

ex) let

let letStr = 'Hello';

letStr = letStr + ' World';
// output : "Hello World";

ex) const

const constStr = 'Hello';

const constNum = 123;

let은 재할당이 가능하기 때문에 타입이 유지가 되고
const는 재할당이 불가능하기 때문에 타입 대신 값이 리터럴 타입으로 유지가 되는 것이다.
그렇기 때문에 let은 연산이 가능하다.


Tuple 타입

  • 길이 고정 & 인덱스 타입이 고정
  • 여러 다른 타입으로 이루어진 배열을 안전하게 관리
  • 배열 타입의 길이 조절
const arr: string[] = ['A', 'B', 'C'];
  
const tuple: [number, string] = [5, 'E'];

배열 타입의 길이 조절

const tuple: [number, ...string[]] = [0, 'A', 'B', 'C'];

unknown 타입

  • 새로운 최상위 타입이다.
  • any처럼 모든 값을 허용하지만 상대적으로 엄격
  • TypeScript에서 unknown으로 추론하지 않기 때문에 개발자가 직접 명시해야 한다.
  • assertion 혹은 타입 가드와 함께 사용해야 한다.

타입가드

타입이 맞는지 검증하는 것
ex) typeof

let num: unknown = 68;

if (typeof num === 'string') {
    num.trim();
}

any대신 unknown을 쓰는 것이 좋다.

profile
자라나라 나무나무

0개의 댓글