type alias(타입변수), readonly

emily,h·2022년 8월 17일
0
  • type키워드를 쓰는 것을 type alias라고 한다.
    type 타입변수명 = 타입종류
  • 타입을 변수에 담아 재사용할 수 있다.
  • 타입명은 대문자로 시작하는 것이 작명 관습이다.
type Animal = string | number | undefined;
let pet1: Animal = "kim";
let pet2: Animal = 123;

type Animal2 = { name: string; age: number };
let pet3: Animal2 = { name: "kim", age: 20 };

object 타입도 저장가능

  • const 변수는 등호로 재할당만 막는 역할, const로 담은 object 수정은 자유롭게 가능
  • typescript을 쓰면 object 자료 수정도 막을 수 있음
const 출생지역 = { region: "seoul" };
출생지역.region = "busan";

readonly

type Girlfriend = {
  readonly name: string;
  // readonly 읽기전용으로 바꾸면 수정할때 에러를 내줌(타입스크립트 에러는 에디터 & 터미널에서만 에러 경고를 줌)
  // 실제 변환된 js파일은 에러 없음
};
const myGF: Girlfriend = {
  name: "kate",
};
myGF.name = "amy";

속성이 선택사항이라면

  • object자료에서 속성중에 선택사항이 있다면 물음표 연산자를 추가하면 된다. 물음표는 "undefined 라는 타입도 가질 수 있다~"라는 뜻이다.
type Square = {
  color? : string,
  width : number,
}

let 네모2 :Square = { 
  width : 100 
}

type 키워드 여러개를 extend 하기

  • union type 만들기
type Name = string;
type Age = number;
type Person = Name | Age;
  • object에 지정한 타입의 경우도 extend가 가능하다.
type PositionX = { x: number };
type PositionY = { y: number };
// {x : number, y : number} 만들기
type NewType = PositionX & PositionY;
let position: NewType = { x: 10, y: 20 };

type 키워드는 재정의가 불가능하다.

type Name = string;
type Name = number; // err

test

// test1
// 이 타입은 object 자료형이어야합니다.
// 이 타입은 color 라는 속성을 가질 수도 있으며 항상 문자가 들어와야합니다. 
// 이 타입은 size 라는 속성이 있어야하며 항상 숫자가 들어와야합니다.
// 이 타입은 position 이라는 변경불가능한 속성이 있어야하며 항상 숫자가 담긴 array 자료가 들어와야합니다.

type Test = {
  color: string,
  size: number,
  readonly position: number[]
}

test2
// 대충 이렇게 생긴 object 자료를 다룰 일이 많습니다. { name : 'kim', phone : 123, email : 'abc@naver.com' }
// object 안에 있는 이름, 전화번호, 이메일 속성이 옳은 타입인지 검사하는 type alias를 만들어봅시다.
// 각 속성이 어떤 타입일지는 자유롭게 정하십시오.

type Test2 = {
  name: string;
  phone: number;
  email: string;
};
let test2: Test2 = { name: "kim", phone: 123, email: "abc@naver.com" };


test3
// test2와 똑같은데 이번엔 이름, 전화번호, 이메일, 미성년자여부 속성을 옳은 타입인지 검사하는 type alias를 만들어봅시다.
// 미성년자 여부 속성은 true/false만 들어올 수 있습니다. 
// test2에서 만들어둔  type alias를 재활용해봅시다.

type Test3 = Test2 & {student:boolean}
let test3: Test3 = { name: "park", phone: 12345, email: "abc@naver.com", student: true };

0개의 댓글