๐ช ์ง๋
2. ํ์ ์คํฌ๋ฆฝํธ ์ง๋ (6/8)
- ๋ฐฐ์ด๊ณผ ํํ
- ๊ฐ์ฒด
- ํ์ ๋ณ์นญ๊ณผ ์๊ทธ๋์ณ
- Enum ํ์
๋ฐฐ์ด๊ณผ ํํ
// ๋ฐฐ์ด
let numArr: number[] = [1, 2, 3];
let strArr: string[] = ["hello", "im", "jieun"];
// ์ ๋ค๋ฆญ ๋ฌธ๋ฒ (Array<> ์ฒ๋ผ ๊บฝ์ ์ด์ฉ)
let boolArr: Array<boolean> = [true, false, true];
Array<> ํํ๋ก๋ ๋ฐฐ์ด์ ํ์ ์ ์ ์ํ ์ ์๋๋ฐ ์ด๋ ๊ฒ ์์ฑํ๋ ๋ฌธ๋ฒ์ ํ์ ์คํฌ๋ฆฝํธ์์๋ ์ ๋ค๋ฆญ ๋ฌธ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
// ๋ฐฐ์ด์ ๋ค์ด๊ฐ๋ ์์์ ํ์
์ด ๋ค์ํ ๊ฒฝ์ฐ (์ ๋์จ ๋ฌธ๋ฒ |)
let multiArr: (number | string)[] = [1, "A", "B"];
// ๋ค์ฐจ์ ๋ฐฐ์ด
let doubleArr: number[][] = [
[1, 2, 3],
[4, 5, 6],
];
number | string ์ฒ๋ผ ๋ฐ(|)๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ํ์ ์ค ํ๋๋ฅผ ๋ง์กฑํ๋ ํ์ ์ ์ ์ํ๋ ๋ฌธ๋ฒ์ ์ ๋์จ ํ์ ๋ฌธ๋ฒ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
// ํํ : ๊ธธ์ด์ ํ์
์ด ๊ณ ์ ๋ ๋ฐฐ์ด
let tup1: [number, number] = [31, 2];
let tup2: [number, string, boolean] = [1, "A", true];
const users:[string, number][] = [
['๊ฐ๋๋ค', 1],
['๋ง๋ฐ์ฌ', 2],
['์์์ฐจ', 3],
['์ด์ง์น', 4],
[5, '์ด๋ผ๋ผ'] // error , ํ์
์์๊ฐ ๊ณ ์ ๋์ด์์
]
๊ฐ์ฒด
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด ํ์
// ์ด๋ ๊ฒ ํ๋กํผํฐ ๋ณ ํ์
์ ์ง์ ํด์ฃผ๋ฉด ์ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ
// ๊ฐ์ฒด์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์
์ ์ง์ = ๊ตฌ์กฐ์ ํ์
์์คํ
(property based typesystem)
// ๋๋ถ๋ถ์ ์ธ์ด๊ฐ ์ฌ์ฉํ๋ ๋ช
๋ชฉ์ ํ์
์์คํ
๊ณผ๋ ๋ฌ๋ฆฌ ํ์
์คํฌ๋ฆฝํธ์์๋ ๊ตฌ์กฐ์ ํ์
์์คํ
์ ์ฌ์ฉํ๋ค.
let user: {
id?: number;
name: string;
} = {
id: 1,
name: "๊ฐ๋๋ค",
};
// id?: number์ฒ๋ผ ?๋ฅผ ๋ถ์ฌ์ ์์ด๋ ์์ด๋ ์๊ด์๋ ํ๋กํผํฐ์๊ฒ ํ์
์ ์ง์ ํด์ฃผ๋ ๋ฐฉ์์ด ์๋ค
// ์ด๋ ๊ฒ ?๊ฐ ๋ถ์ฌ์ง ํ๋กํผํฐ๋ฅผ ์ ํ์ ํ๋กํผํฐ (optional property)๋ผ๊ณ ํ๋ค
user = {
name: "์ฐ์ฃผ",
};
let config: {
readonly apiKey: string;
} = {
apiKey: "Secret KEY",
};
// config.apiKey = "hacked";
ํ์ ๋ณ์นญ
// ํ์
๋ณ์นญ
// ๊ฐ์ ์ค์ฝํ ๋ด์์ ์ด๋ฆ ์ค๋ณต x, ์ปดํ์ผ๋๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ๋ก ๋ฐ๋๋ฉด์ ํ์
๋ณ์นญ ์ ์๋ ์ฌ๋ผ์ง.
import { type } from "os";
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string;
};
let user: User = {
id: 1,
name: "์ผ๋ก๋ก",
nickname: "์ค์ฌ",
birth: "1000.01.01",
bio: "๊ฑด๋ด",
location: "ํผ๋ ๋ณ",
};
// ์ธ๋ฑ์ค ์๊ทธ๋์ฒ
// key์ value์ ๊ท์น์ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฒด์ ํ์
์ ์ ์ํ ์ ์๋ ๋ฌธ๋ฒ
// ์ด ๊ท์น์ ์๋ฐํ์ง๋ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋จ์ง ์์.
// ๋น ๊ฐ์ฒด์ฌ๋ ์ค๋ฅ ์๋ธ (์๋ฐํ ๊ฒ ์์ด์)
type CountryCodes = {
[key: string]: string;
};
let countryCodes:CountryCodes = {
Korea: "KO",
UnitedKingdom: "UK",
UnitedState: "US",
};
// ์ถ๊ฐ์ ์ธ key์ value์ ํ์
์ด ๋ฐ๋์ ์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ value์ ์ผ์นํ๊ฑฐ๋ ํธํํด์ผํ๋ค.
type CountryNumberCodes = {
[key: string]: number;
// Korea: string; ์ด๋ฉด ์ธ๋ฑ์ค ์๊ทธ๋์ฒ์ value์ ์ผ์นํ๊ฑฐ๋ ํธํํ์ง ์์ผ๋ฏ๋ก ์ค๋ฅ๋ฐ์
Korea: number;
};
let countryNumberCodes:CountryNumberCodes = {
Korea: 410,
UnitedState: 840,
UnitedKingdom: 826,
}
Enum ํ์
// enum type
// ์ฌ๋ฌ ๊ฐ์ง ๊ฐ๋ค์ ๊ฐ๊ฐ ์ด๋ฆ์ ๋ถ์ฌํด ์ด๊ฑฐํด๋๊ณ ์ฌ์ฉํ๋ ํ์
// ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ฒด๋ก ์ปดํ์ผ ๊ฒฐ๊ณผ์ ๋จ์์์.
enum Role {
ADMIN,
USER,
GUEST,
// ์ฒ์ key๊ฐ์ ์๋์ผ๋ก 0์ด ๋ค์ด๊ฐ๊ธฐ ๋๋ฌธ์ ์์ฒ๋ผ ๋ฐ๋ก number๋ฅผ ์ง์ ํด์ฃผ์ง ์์๋ 0, 1, 2๊ฐ ์์๋๋ก ์๋ ์ง์ ๋๋ค.
// ๋ง์ฝ USER = 10, ๋ผ๊ณ value๋ฅผ ์ง์ ํ๋ฉด ์์๋๋ก 0, 10, 11์ ๊ฐ์ด ๋๋ค.
}
enum Language {
korean = "ko",
english = "en",
japanese = "jp",
}
const user1 = {
name: "๊ฐ๋๋ค",
role: Role.ADMIN,
language: Language.korean,
};
const user2 = { name: "๋ผ๋ง๋ฐ", role: Role.USER, language: Language.english };
const user3 = { name: "์ฌ์์", role: Role.GUEST, language: Language.japanese };
console.log(user1, user2, user3);
๊ณผ์
Q. ๋ค์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ 4๊ฐ์ ํ์ ์ ์ ์ํ์ธ์.
- _Any ํ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Nums ํ์ ์ ์ซ์๋ง ๋ด์ ์ ์๋ ๋ฐฐ์ด ํ์ ์ ๋๋ค.
- Colors ํ์ ์ ๋ฌธ์์ด๋ง ๋ด์ ์ ์๋ ๋ฐฐ์ด ํ์ ์ ๋๋ค.
- Coords ํ์ ์ [์ซ์, ์ซ์] ํํ์ ๋ฐฐ์ด๋ง ํ์ฉํ๋ ํ์ ์ ๋๋ค.
- Info ํ์ ์ [์ซ์, ๋ฌธ์์ด] ํํ์ ๋ฐฐ์ด๋ง ํ์ฉํ๋ ํ์ ์ ๋๋ค.
type Nums = never;
type Colors = never;
type Coords = never;
type Info = never;
โฌ๏ธ
type Nums = number[];
type Colors = string[];
type Coords = [number, number];
type Info = [string, number];
Q. ๋ค์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ Course ํ์ ์ ์ ์ํ์ธ์.
- _Any ํ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- Course ํ์ ์ ์จ๋ผ์ธ ๊ฐ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด ํ์ ์ ์ ์ํฉ๋๋ค.
- ๋ฌธ์์ด์ ์ ์ฅํ๋ name ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์ซ์๋ฅผ ์ ์ฅํ๋ price ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ์ซ์๋ฅผ ์ ์ฅํ๋ student_cnt ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ๋ฌธ์์ด์ ์ ์ฅํ๋ author ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
- ๋ฌธ์์ด ๋ฐฐ์ด์ ์ ์ฅํ๋ related_courses ํ๋กํผํฐ๋ฅผ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
type Course = never;
โฌ๏ธ
type Course = {
name: string;
price: number;
student_cnt: number;
author: string;
related_courses: string[];
};
Q. ๋ค์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ User ํ์ ์ ๊ตฌํํ์ธ์.
- _Any ํ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ํ์ ์ด์ด์ผ ํฉ๋๋ค.
- String ํ์ ์ name ํ๋กํผํฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- String ํ์ ์ email ํ๋กํผํฐ๊ฐ ์์ด์ผ ํฉ๋๋ค.
- ๊ทธ ์ธ์ String ํ์ ์ ๋์ ํ๋กํผํฐ๋ค๋ ์ถ๊ฐํ ์ ์์ด์ผ ํฉ๋๋ค.
type User = never;
โฌ๏ธ
type User = {
name: string;
email: string;
[key: string]: string;
};