타입 추론 / 단언 / 가드

2024. 4. 12. 14:02·Javascript

타입 추론(Interence)

개발자가 변수 선언할때 타입을 쓰지않아도 컴파일이 스스로 판단해서 타입을 넣어주는 것을 말합니다.

타입 추론이 되는 상황

초기화된 변수

let x = 12; // number

 

기본값이 설정된 파라미터

function test(b = 10) {
}

 

반환값이 있는 함수

function test(b) {
	return b; // 
}

 

기타

interface Person {
  name: string;
}
interface Korean extends Person {
  liveInKr: boolean;
}
interface Japanese extends Person {
  liveInJp: boolean;
}

const p1: Person = { name: "mike" };
const p2: Korean = { name: "minsu", liveInKr: true };
const p3: Japanese = { name: "danaka", liveInJp: true };

// 공통 상속관계의 부모 interface인 **Person[]**으로 추론
const arr1 = [p1, p2, p3];

// 서로 상속관계 아니므로 유니언 타입 **(Korean | Japanese)[]**으로 추론
const arr2 = [p2, p3];

 

타입 단언(Assertion)

타입스크립트에서 추론하는 값보다 개발자가 해당 변수의 타입을 더 잘 알고있을때, 변수에 원하는 타입을 강제로 부여(변환은 아님)합니다.

let a;
a = "20";
a = 10;
// ts에서 a는 any로 추론하기 때문에 b도 any라고 ts는 추론합니다.
// 하지만 개발자는 재할당 된 값이 number임을 알고 있기때문에 단언하여 타입을 확정합니다.
let b = **a as number**;

// ---

// DOM 조작시 자주 사용됩니다.
// 단언하지 않으면 'error: Object is possibly null.'라며 해당 엘리먼트가 없는 가능성도 체크하기 때문입니다.
const div = document.querySelector("div") as HTMLDivElement;
div.innerHTML = "asdf";

 

타입 가드(Guard)

  • 어떠한 전용 문법이 존재 하는 것이 아니라, 기법입니다.
  • 일반적으로 if문으로 분기처리하여 타입을 확인합니다.

키워드들에 따른 타입 가드 사용 예시

typeof: 일반 타입 체킹

function check(a: number | string): string {
  if (typeof a === "string") return a;
  else if (typeof a === "number") a.toString();
}

 

Array.isArray(): 배열 체킹

function check(a: number | number[]) {
  if (Array.isArray(a)) {
    a.map((item) => item + 1);
  } else {
    a + 1;
  }
}

 

.type / in: 객체 속성 체킹

type Lion = { bite: boolean };
type Ant = { acid: boolean };

function typeCheck(a: Lion | Ant) {
  if ("bite" in a) {
    a.bite = true;
  }
  if ("acid" in a) {
    a.acid = true;
  }
}

 

instanceof: 클래스 체킹

class Animal {
  cat() {
    console.log("IAM CAT");
  }
}

// 클래스도 타입이 될 수 있다.
function check(param: Animal | string) {
  if (param instanceof Animal) param.cat();
  else console.log(`param '${param}' is just a string`);
}

 

 

 

 

 

 

 

 

 

 

[참고자료]

타입스크립트 타입 추론 / 단언 / 가드

📘 타입 추론 / 타입 호환 / 타입 단언 / 타입 가드 💯 총정리

저작자표시 비영리 변경금지 (새창열림)

'Javascript' 카테고리의 다른 글

이벤트 전파 제어  (0) 2024.04.12
함수형프로그래밍  (0) 2024.04.11
번들러  (0) 2024.04.11
프로미스와 Async / await  (0) 2024.04.11
프로토타입  (1) 2024.04.11
'Javascript' 카테고리의 다른 글
  • 이벤트 전파 제어
  • 함수형프로그래밍
  • 번들러
  • 프로미스와 Async / await
URE
URE
Skill: Javascript, ReactJS, Next.js, React Native ... *블로그 이전 작업(24. 04. 11 ~ 24. 04. 15)
  • URE
    Dev++
    URE
  • 전체
    오늘
    어제
    • 분류 전체보기 (51)
      • Browser (6)
      • OS (1)
      • Javascript (14)
      • React (19)
      • Next.js (4)
      • React Native (0)
      • Architecture (1)
      • Network (3)
      • 스크랩 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    react concurrent
    IP
    JS
    react18
    원시타입
    Redux
    참조타입
    javascript
    swr
    Port
    리액트 코어
    URL
    react
    브라우저
    자바스크립트
    상태관리라이브러리
    리덕스
    리액트
    dataFetching
    TCP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
URE
타입 추론 / 단언 / 가드
상단으로

티스토리툴바