export type Member = {
id: number;
name: string;
age: number;
email: string;
role: string;
isAdmin: boolean;
createAt: string;
phone?: string;
};
const user_hong: Member = {
id: 1,
name: "홍길동",
age: 10,
email: "[email protected]",
role: "guest",
isAdmin: false,
createAt: "2024-12-24",
};
type Member
를 별도의 컴포넌트를 만들어서 export 로 사용하게 하는걸 고려해보자.
데이터의 타입은 대문자로 하도록 하자. (파스칼케이스)
인덱스 시그니처의 모습
type Cities = {
[key: string]: string;
};
export type Todo = {
id: number;
title: string;
content: string;
completed: boolean;
date: Date;
};
export type User = {
nickName: string;
role: string;
follow: string[];
};
export type Cart = {
goodId: string[];
total: number;
count: number;
};
// 회원의 등급을 설정하려고 한다.
// 3은 관리자, 2는 사장님, 1은 회원, 0은 방문객
// "admin" : 관리자
// "owner": 사장님
// "member": 회원
// "guest": 방문객
const Admin = 3;
const Owner = 2;
const Member = 1;
const Guest = 0;
const user_Go = {
nickName: "고길동",
role: Admin,
};
const user_park = {
nickName: "둘리",
role: Owner,
};
// 위의 상수 정의는 관리가 모호하다 라고 판단된다.
// 주석을 보지 않으면 의미가 모호하다.
// enum 을 도입해서 상수를 묶어 관리해보자.
// 같은 용도를 모아서 상수의 집합을 만들어서 활용해보자.
// 특정한 값이 없으면 0부터 대입 후 증가
enum MemberRole {
Admin,
Owner,
Member,
Guest,
}
const user_go = {
nickName: "고길동",
role: MemberRole.Guest,
};
// enum 을 이용해서 다국어 서비스를 관리해보자.
enum Language {
KOREAN = "ko",
ENGLISH = "en",
CHINESE = "cn",
JAPANESE = "ja",
}
const user_jone = {
nickName: "존",
role: MemberRole.Guest,
language: Language.ENGLISH,
};
// any 와 unknown 의 차이를 이해하자.
// js 데이터처리와 가장 흡사
let anything: any = "Hello, world";
anything = 123;
anything.toUpperCase(); // 오류 문자 적용
anything.toFixed(2); // 숫자 적용
let anythingUn: unknown = "Hello, world";
anythingUn = 123;
// any 보다는 unknow을 사용하세요.
// 단 타입을 검사하는 조건을 넣어서 안전하게 사용하세요.
if (typeof anythingUn === "string") {
anythingUn.toUpperCase(); // 오류 문자 적용
}
if (typeof anythingUn === "number") {
anythingUn.toFixed(2); // 숫자 적용
}
타입 단언
(type assertion)let age: unknown = "hello";
console.log((age as string).toUpperCase());
age as string = “age는 string 이니까 믿어달라!”