이 포스팅은 드림코딩 엘리님의 타입스크립트 강의를 복습하며 작성되었습니다.
타입스크립트는 아래 코드와 같이 타입을 정의할 수 있습니다.
type Text = string; // Text라는 타입을 정의
const name: Text = "abcdefg"; // 변수 name은 Text타입을 가진다.
✅ 설명
type Num = number; // Num이라는 타입을 정의
const score: Num = 10; // 변수 score은 Num타입을 가진다.
type Student = {
name: string;
age: number;
};
string값을 갖는 name, number값을 갖는 age라는 프로퍼티가 있는 객체 Student 타입을 정의했습니다.
이 Student타입을 사용하려면 아래와 같이 name, age값을 모두 설정해야 합니다.
const student: Student = {
name: "sangji",
age: 27,
};
const user: Student = {
animal:'cat' // Error
}
Error:
Type '{ animal: string; }' is not assignable to type 'Student'. Object literal may only specify known properties, and 'animal' does not exist in type 'Student'.ts
타입을 문자열로 지정할 수 있습니다.
type Bom = "SJ's cat";
let bom: Bom;
변수 bom에는 "SJ's cat"만 할당할 수 있습니다.
또한 "SJ's cat"을 할당한 후에 사용할 수 있습니다.
console.log(bom) // Error: Variable 'bom' is used before being assigned.
bom = "Bill's cat"; // Error: Type '"Bill's cat"' is not assignable to type '"Sangji's cat"'.
bom = "Sangji's cat";
console.log(bom);
EX1.
Union으로 타입 Direction을 정의합니다.
Direction타입을 가지는 값은 left, right, up, down 중에서만 값을 가질 수 있습니다.
type Direction = "left" | "right" | "up" | "down";
function move(direction: Direction) {
console.log(direction);
}
move("up"); // up
함수 move의 인자로는 Direction 타입의 값만 올 수 있습니다.
타입스크립트는 move 호출 시 인자로 받을 수 있는 String 타입 4가지를 자동으로 보여줍니다.
EX2.
type TileSize = 8 | 16 | 32;
const tile: TileSize = 32;
tile이라는 상수는 TileSize라는 타입을 갖고 8, 16, 32 중에서 하나의 값만 가질 수 있습니다.
const tile2: TileSize = 10; // Error: Type '10' is not assignable to type 'TileSize'.
각 Union안에 동일한 키(key)를 갖지만 다른 값(value)을 갖도록 만들 수 있습니다.
EX.
type SuccessState = {
result: "success";
response: {
body: string;
};
};
type FailState = {
result: "fail";
reason: string;
};
type LoginState = SuccessState | FailState;
function printLoginState(state: LoginState){
if (state.result === "success"){
console.log(state.response.body);
}else{
console.log(state.reason);
}
}