ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ(TypeScript) κ°μ | μ΄μ ν Winterlood - μΈνλ°
μ΄μ ν Winterlood | , νλ‘ νΈμλμ νΌν μ μλ λμΈ νμ μ€ν¬λ¦½νΈ,μ΄μ λ μ λλ‘ μ 볡ν λκ° μμ΅λλ€! π [μ¬μ§]μΈνμ½ 2023 'νμ μ€ν¬λ¦½νΈλ μ κ·Έλ΄κΉ?' λ°νμμ κ°μμ λλ€. π§ λ°°μ
www.inflearn.com
π κΈ°λ³Ένμ
νμ μ€ν¬λ¦½νΈκ° μ체μ μΌλ‘ μ 곡νλ νμ λ€λ‘, κ° νμ λ€μ λΆλͺ¨-μμ κ΄κ³λ₯Ό κ°μ§λ©° κ³μΈ΅μ μΌλ‘ ꡬμ±
π μμνμ κ³Ό 리ν°λ΄νμ
// β
μμ νμ
(Primitive Type)
// → κ°μ₯ κΈ°λ³Έμ μΈ κ° λ¨μλ‘, νλμ κ°λ§ μ μ₯ν μ μλ νμ
// number
let num1: number = 123;
let num2: number = -123;
let num3: number = 0.123;
let num4: number = -0.123;
let num5: number = Infinity;
let num6: number = -Infinity;
let num7: number = NaN;
// string
let str1: string = "hello";
let str2: string = 'hello';
let str3: string = `hello`;
let str4: string = `hello ${num1}`;
// boolean
let bool1: boolean = true;
let bool2: boolean = false;
// null
let null1: null = null;
// undefined
let unde1: undefined = undefined;
// β
리ν°λ΄ νμ
(Literal Type)
// → νΉμ ν "κ° κ·Έ μ체"λ₯Ό νμ
μΌλ‘ μ§μ
// → μ€μ§ ν΄λΉ κ°λ§ ν λΉ κ°λ₯ (νμ
μ΄ κ³§ κ°)
let numA: 10 = 10; // μ«μ 10λ§ ν λΉ κ°λ₯
let strA: "hello" = "hello"; // λ¬Έμμ΄ "hello"λ§ ν λΉ κ°λ₯
let boolA: true = true; // trueλ§ ν λΉ κ°λ₯
let boolB: false = false; // falseλ§ ν λΉ κ°λ₯
π λ°°μ΄κ³Ό νν
// β
λ°°μ΄ (λμΌν νμ
μ κ°λ€μ μμλλ‘ λμ΄ν μλ£ κ΅¬μ‘°)
let numArr: number[] = [1, 2, 3];
let strArr: string[] = ["hello", "everyone"];
let boolArr: Array<boolean> = [true, false, true]; // μ λ€λ¦ λ°©μ
// λ°°μ΄μ λ€μ΄κ°λ μμλ€μ νμ
μ΄ λ€μν κ²½μ° (μ λμΈ νμ
)
let multiArr: (number | string)[] = [1, "hello"];
// λ€μ°¨μ λ°°μ΄μ νμ
μ μ μνλ λ°©λ²
let doubleArr: number[][] = [
[1, 2, 3],
[4, 5],
];
// β
νν (λ°°μ΄μ²λΌ 보μ΄μ§λ§, κΈΈμ΄μ κ° μμμ νμ
μ΄ κ³ μ λ λ°μ΄ν° ꡬ쑰)
// → κ° μμκ° "μ ν΄μ§ μλ―Έ"μ νμ
μ κ°μ§λ ꡬ쑰μ μ ν©
let tup1: [number, number] = [1, 2];
let tup2: [number, string, boolean] = [1, '2', true];
// ννλ λ°°μ΄μ΄κΈ° λλ¬Έμ push, pop λ± λ©μλ μ¬μ© κ°λ₯
// μ»΄νμΌλ¬λ νμ©νμ§λ§ μλλ κ΅¬μ‘°κ° κΉ¨μ§ μ μμΌλ―λ‘ μ£Όμ νμ
tup1.push(3);
π κ°μ²΄
// β
κ°μ²΄ νμ
(κ°μ²΄μ ꡬ쑰λ₯Ό λͺ
ννκ² μ μνκΈ° μν νμ
)
let user: {
id?: number; // ?: μ νμ νλ‘νΌν°
name: string;
} = {
name: "κ°μ°μ"
};
let config: {
readonly apiKey: string // readonly: μ½κΈ° μ μ© νλ‘νΌν°
} = {
apiKey: "MY API KEY",
};
// config.apiKey = "NEW KEY"; // β
π νμ λ³μΉκ³Ό μΈλ±μ€ μκ·Έλμ²
// β
νμ
λ³μΉ (볡μ‘ν κ°μ²΄ νμ
μ μ΄λ¦μ λΆμ¬ μ¬μ¬μ©μ±μ λμ΄λ κΈ°λ₯)
// → μ¬λ¬ κ³³μμ λ°λ³΅μ μΌλ‘ μ¬μ©λ νμ
ꡬ쑰λ₯Ό ν λ²μ μ μνκ³ μ¬μ¬μ© κ°λ₯
type User = {
id: number;
name: string;
nickname: string;
birth: string;
bio: string;
location: string
};
let user1: User = {
id: 1,
name: "κ°μ°μ",
nickname: "κ°μ",
birth: "2002.05.29",
bio: "μλ
νμΈμ",
location: "λꡬκ΄μμ"
};
let user2: User = {
id: 1,
name: "νκΈΈλ",
nickname: "νλ",
birth: "1900.01.01",
bio: "μλ
νμΈμ",
location: "μμΈνΉλ³μ"
};
// λμΌν μ€μ½ν λ΄μμλ κ°μ μ΄λ¦μ νμ
λ³μΉ μ€λ³΅ μ μ λΆκ°
// ν¨μ λ± λ€λ₯Έ μ€μ½νμμλ κ°λ₯
function test() {
type User = string; // OK: ν¨μ λ΄λΆμ λ³λ μ€μ½ν
}
// β
μΈλ±μ€ μκ·Έλμ² (κ°μ²΄μ key κ°μλ μ΄λ¦μ΄ μ ν΄μ§μ§ μμ κ²½μ° μ μ©ν λ¬Έλ²)
// → μ μ°ν ꡬ쑰μ κ°μ²΄ νμ
μ μμ μ¬μ©
type CountryCodes = {
[key: string] : string; // λͺ¨λ keyλ string, λͺ¨λ valueλ string
Korea: string; // λ°λμ ν¬ν¨λμ΄μΌ ν νλ‘νΌν°λ λͺ
μ κ°λ₯
};
let countryCodes: CountryCodes = {
Korea: "ko",
UnitedState: "us",
UnitedKingdom: "uk",
// ...
};
π Enum νμ
// β
enum νμ
(κ΄λ ¨λ μμ κ°λ€μ νλμ κ·Έλ£ΉμΌλ‘ μ΄κ±°νμ¬ μ μνλ νμ
)
// → TypeScriptμμ μ 곡νλ μ΄κ±°ν νμ
, JSλ‘ μ»΄νμΌλλ©΄ κ°μ²΄λ‘ λ³νλ¨
enum Role { // μ«μν enum
ADMIN = 0,
USER = 1,
GUEST = 2,
}
enum Language { // λ¬Έμμ΄ enum
korean = "ko",
english = "en",
}
const user1 = {
name: "κ°μ°μ",
role: Role.ADMIN,
language: Language.korean,
};
const user2 = {
name: "κ°λ§λ¦¬",
role: Role.USER,
language: Language.korean,
};
const user3 = {
name: "κ°λ₯κ°",
role: Role.GUEST,
language: Language.english,
};
π Anyμ Unknown νμ
// β
any νμ
(λͺ¨λ νμ
μ νμ©νλ©° νμ
κ²μ¬λ₯Ό μλ΅νλ νΉμ νμ
)
// → νμ
μμ μ±μ ν¬κΈ°νκ³ μ μ°μ±μ κ·Ήλνν μ μμ§λ§, μ¬μ©μ μ£Όμκ° νμν νμ
let anyVar: any = 10;
anyVar = "hello";
anyVar = true;
anyVar = {};
anyVar = () => {};
// νμ
μ€ν¬λ¦½νΈμ νμ
κ²μ¬ 무λ ₯ν → λ°νμ μλ¬ λ°μ κ°λ₯
anyVar.toUpperCase(); // λ¬Έμμ΄μ΄ μλμ΄λ νΈμΆ κ°λ₯
anyVar.toFixed(); // μ«μκ° μλμ΄λ νΈμΆ κ°λ₯
// μ΄λ€ νμ
λ³μμλ ν λΉ κ°λ₯ (νμ
κ²μ¬ X)
let num: number = 10;
num = anyVar; // λ¬Έμ μμ΄ ν΅κ³Όλ¨
// β
unknown νμ
(anyμ μ μ¬νμ§λ§ νμ
μμ μ±μ΄ 보μ₯λλ νμ
)
// → μ΄λ€ κ°μ΄λ ν λΉ κ°λ₯νμ§λ§, μ¬μ© μ νμ
νμΈμ΄ νμν¨
let unknownVar: unknown;
unknownVar = "";
unknownVar = 1;
unknownVar = () => {};
// λ€λ₯Έ νμ
λ³μμλ μ§μ ν λΉ λΆκ°
// num = unknownVar; // β
// λ©μλ νΈμΆ, μ°μ° λ± λΆκ°
// unknownVar.toUpperCase(); // β
// unknownVar.toFixed(); // β
// unknownVar * 2; // β
// νμ
κ°λλ₯Ό ν΅ν΄ μμ νκ² νμ
μ’νκΈ°
if (typeof unknownVar === "number") {
num = unknownVar;
console.log(unknownVar * 2);
}
π Voidμ Never νμ
// β
void νμ
(κ°μ΄ μ‘΄μ¬νμ§ μμμ λνλ΄λ νμ
)
// → μ£Όλ‘ "μ무κ²λ λ°ννμ§ μλ ν¨μ"μ λ°ν νμ
μΌλ‘ μ¬μ©λ¨
function func1(): string {
return "hello";
}
function func2(): void {
console.log("hello");
}
// voidλ 'undefined'λ§ νμ© (strictNullChecksκ° falseλ©΄ 'null'λ κ°λ₯)
let a: void;
a = undefined;
// a = null; // β κΈ°λ³Έ μ€μ μμ μ€λ₯ (strictNullChecksκ° κΊΌμ Έ μμ΄μΌ κ°λ₯)
// β
never νμ
(μ λ λ°νλμ§ μμμ λνλ΄λ νμ
)
// → ν¨μκ° "μ μμ μΌλ‘ μ’
λ£λμ§ μλ κ²½μ°"μ λ°ν νμ
μΌλ‘ μ¬μ©λ¨
function func3(): never {
while (true) {}
}
function func4(): never {
throw new Error();
}
// never νμ
μ μ΄λ€ κ°λ ν λΉν μ μμ
let b: never;
// b = 1; // β μ€λ₯
// b = undefined; // β μ€λ₯
// b = null; // β μ€λ₯
β¬οΈ λ€μ λ΄μ©μ μλ κΈμ μ°Έκ³
μΈνλ° κ°μ - ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ (νμ μ€ν¬λ¦½νΈ μ΄ν΄νκΈ°)
ν μ ν¬κΈ°λ‘ μλΌλ¨Ήλ νμ μ€ν¬λ¦½νΈ(TypeScript) κ°μ | μ΄μ ν Winterlood - μΈνλ°μ΄μ ν Winterlood | , νλ‘ νΈμλμ νΌν μ μλ λμΈ νμ μ€ν¬λ¦½νΈ,μ΄μ λ μ λλ‘ μ 볡ν λκ° μμ΅λλ€! π [μ¬μ§]
isliife2.tistory.com