- 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 하기
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 };