LearningTS Chapter 6 - YDP-SPLOUNGE-CLUB/typescript-study GitHub Wiki
06. λ°°μ΄
μλ°μ€ν¬λ¦½νΈ λ°°μ΄μ λ§€μ° μ μ°νκ³ λ΄λΆμ λͺ¨λ νμ μ κ°μ νΌν©ν΄μ μμ₯ν μ μλ€.
const element = [true, null, undefined, 22];
element.push("even", ["more"]);
κ·Έλ¬λ λλΆλΆμ κ°λ³ μλ°μ€ν¬λ¦½νΈ λ°°μ΄μ νλμ νΉμ νμ μ κ°λ§ κ°μ§λ€.
λ€λ₯Έ νμ μ κ°μ μΆκ°νκ² λλ©΄ λ°°μ΄μ μ½μ λ νΌλμ μ€ μ μμΌλ©° νλ‘κ·Έλ¨μ λ¬Έμ κ° λ λ§ν μ€λ₯κ° λ°μν μλ μλ€.
6.1 λ°°μ΄ νμ
λ€λ₯Έ λ³μ μ μΈκ³Ό λ§μ°¬κ°μ§λ‘ λ°°μ΄μ μ μ₯νκΈ° μν λ³μλ μ΄κΉκ°μ΄ νμνμ§ μλ€. λ³μλ undefined λ‘ μμν΄μ λμ€μ λ°°μ΄ κ°μ λ°μ μ μλ€.
νμ μ€ν¬λ¦½νΈλ λ³μμ νμ μ λν μ΄μ μ μ κ³΅ν΄ λ°°μ΄μ΄ ν¬ν¨ν΄μΌ νλ κ°μ νμ μ μλ €μ£Όλ €κ³ νλ€.
6.1.1 λ°°μ΄κ³Ό ν¨μ νμ
λ°°μ΄ νμ μ ν¨μ νμ μ 무μμ΄ μλμ§λ₯Ό ꡬλ³νλ κ΄νΈκ° νμν ꡬ문 컨ν μ΄λμ μμ΄λ€.
κ΄νΈλ μ λν μ΄μ μ μ΄λ λΆλΆμ΄ ν¨μ λ°ν λΆλΆμ΄κ³ μ΄λ λΆλΆμ΄ λ°°μ΄ νμ λ¬ΆμμΈμ§λ₯Ό λνλ΄κΈ° μν΄ μ¬μ©νλ€.
// string λ°°μ΄μ λ°ννλ ν¨μ
let creatrStrings: () => string[];
// κ°κ°μ stringμ λ°ννλ ν¨μ λ°°μ΄
let createCreators: (() => string)[];
6.1.2 μ λμΈ νμ λ°°μ΄
λ°°μ΄μ κ° μμκ° μ¬λ¬ μ ν νμ μ€ νλμΌ μ μμμ λνλ΄λ €λ©΄ μ λμΈ νμ μ μ¬μ©νλ€.
μ λμΈ νμ μΌλ‘ λ°°μ΄ νμ μ μ¬μ©ν λ μ λν μ΄μ μ μ΄λ λΆλΆμ΄ λ°°μ΄μ μ½ν μΈ μ΄κ³ μ΄λ λΆλΆμ΄ μ λμΈ νμ λ¬ΆμμΈμ§λ₯Ό λνλ΄κΈ° μν΄ κ΄νΈλ₯Ό μ¬μ©ν΄μΌ ν μλ μλ€.
// νμ
μ string λλ number μ λ°°μ΄
let stringOrArrayOfNumber: string | number[];
// νμ
μ κ°κ° number λλ string μμμ λ°°μ΄
let arrayOfStringOrNumbes: (string | number)[]
6.3 μ€νλ λμ λλ¨Έμ§ λ§€κ°λ³μ
6.3.1 μ€νλ λ
... μ€νλ λ μ°μ°μλ₯Ό μ¬μ©ν΄ λ°°μ΄μ κ²°ν©νλ€. νμ μ€ν¬λ¦½νΈλ μ λ ₯λ λ°°μ΄ μ€ νλμ κ°μ΄ κ²°κ³Ό λ°°μ΄μ ν¬ν¨λ κ²μμ μ΄ν΄νλ€.
λ§μ½μ μ λ ₯λ λ°°μ΄μ΄ λμΌν νμ μ΄λΌλ©΄ μΆλ ₯ λ°°μ΄λ λμΌν νμ μ΄λ€. μλ‘ λ€λ₯Έ νμ μ λ λ°°μ΄μ ν¨κ» μ€νλ λμ μ λ°°μ΄μ μμ±νλ©΄
μ λ²Όμ΄μ λ κ°μ μλ νμ μ€ μ΄λ νλμ μμμΈ μ λμΈ νμ λ°°μ΄λ‘ μ΄ν΄λλ€.
// string[]
const soldires = ["a", "b", "c"];
// number[]
const sodierAges = [1,2,3];
// (string | number)[]
const conjoined = [...soldires, ...sodierAges];
6.3.2 λλ¨Έμ§ λ§€κ°λ³μ μ€νλ λ
νμ μ€ν¬λ¦½νΈλ λλ¨Έμ§ λ§€κ°λ³μλ‘ λ°°μ΄μ μ€νλ λνλ μλ°μ€ν¬λ¦½νΈ μ€νμ μΈμνκ³ μ΄μ λν΄ νμ κ²μ¬λ₯Ό μννλ€.
λλ¨Έμ§ λ§€κ°λ³μλ₯Ό μν μΈμλ‘ μ¬μ©λλ λ°°μ΄μ λλ¨Έμ§ λ§€κ°λ³μμ λμΌν λ°°μ΄ νμ μ κ°μ ΈμΌ νλ€.
6.4 νν
μλ°μ€ν¬λ¦½νΈ λ°°μ΄μ μ΄λ‘ μ μ΄λ€ ν¬κΈ°λΌλ λ μ μλ€. νμ§λ§ λλ‘λ ννμ΄λΌκ³ νλ κ³ μ λ ν¬κΈ°μ λ°°μ΄μ μ¬μ©νλ κ²μ΄ μ μ©νλ€.
νν λ°°μ΄μ κ° μΈλ±μ€μ μλ €μ§ νΉμ νμ μ κ°μ§λ©° λ°°μ΄μ λͺ¨λ κ°λ₯ν λ©€λ²λ₯Ό κ°λ μ λμΈ νμ λ³΄λ€ λ ꡬ체μ μ΄λ€. ν¬ν νμ μ μ μΈνλ ꡬ문μ λ°°μ΄ λ¦¬ν°λ΄ μ²λΌ 보μ΄μ§λ§
μμμ κ° λμ νμ μ μ λλ€.
let yearAndWarrior: [number, string];
yearAndWarrior = [1, "a"]; // OK
yearAndWarrior = [false, "1"]; // Error
yearAndWarrior = ["a", 1]; // Error
yearAndWarrior = [1]; // Error
6.4.1 νν ν λΉ κ°λ₯μ±
νμ μ€ν¬λ¦½νΈμμ νν νμ μ κ°λ³ κΈΈμ΄μ λ°°μ΄ νμ λ³΄λ€ λ ꡬ체μ μΌλ‘ μ²λ¦¬λλ€. κ°λ³ κΈΈμ΄μ λ°°μ΄ νμ μ νν νμ μ ν λΉν μ μλ€.
pairLoose λ΄λΆμ [boolean, number] κ° μλ κ²μ λ³Ό μ μμ§λ§ νμ μ€ν¬λ¦½νΈλ λ μΌλ°μ μΈ (boolean | number)[] νμ μΌλ‘ μ μΆνλ€.
const pariLoose = [false, 123];
λλ¨Έμ§ λ§€κ°λ³μλ‘μμ νν
ννμ ꡬ체μ μΈ κΈΈμ΄μ μμ νμ μ 보λ₯Ό κ°μ§λ λ°°μ΄λ‘ κ°μ£Όλλ―λ‘ ν¨μμ μ λ¬ν μΈμλ₯Ό μ μ₯νλ λ° νΉν μ μ©νλ€.
νμ μ€ν¬λ¦½νΈλ ... λλ¨Έμ§ λ§€κ°λ³μλ‘ μ λ¬λ ννμ μ νν νμ κ²μ¬λ₯Ό μ 곡ν μ μλ€.
function looPar(name: string, value: number) {
console.log(`${name} has ${value}`);
}
const pairArray = ["Amage", 1];
looPar(...pairArray); // Error
const pariTupleIncorrect: [string, number] = ["Amage", 1];
looPar(...pairArray); // OK
λλ¨Έμ§ λ§€κ°λ³μ ννμ μ¬μ©νκ³ μΆλ€λ©΄ μ¬λ¬ λ² ν¨μλ₯Ό νΈμΆνλ μΈμ λͺ©λ‘μ λ°°μ΄μ μ μ₯ν΄ ν¨κ» μ¬μ©ν μ μλ€.
function logTrio(name: string, value: [number, boolean]) {
console.log(`${name} has ${value[0]} (${value[1]}`);
};
const trios: [string , [number, boolean][]] = [
["a", [1, true]],
["b", [2, false]],
["c", [3, true]],
]
trios.forEach(trio => logTrio(...trio)); // OK
6.4.2 νν μΆλ‘
νμ μ€ν¬λ¦½νΈλ μμ±λ λ°°μ΄μ ννμ΄ μλ κ°λ³ κΈΈμ΄μ λ°°μ΄λ‘ μ·¨κΈνλ€. λ°°μ΄μ΄ λ³μμ μ΄κΉκ° λλ ν¨μμ λν λ°νκ°μΌλ‘ μ¬μ©λλ κ²½μ° κ³ μ λ ν¬κΈ°μ ννμ΄ μλλΌ μ μ°ν ν¬κΈ°μ λ°°μ΄λ‘ κ°μ νλ€.
function firstCharAndSize(input: string) {
return [input[0], input.length];
}
// firstChar Type = string | number;
// size Type = string | number;
const [firstChar, size] = firstCharAndSize("abc");
νμ μ€ν¬λ¦½νΈμμλ κ°μ΄ μΌλ°μ μΈ λ°°μ΄ νμ λμ μ’ λ ꡬ체μ μΈ νν νμ μ΄μ΄μΌ ν¨μ λ€μ λ κ°μ§ λ°©λ²μΌλ‘ λνλΈλ€. λͺ μμ νν νμ κ³Ό const μ΄μμ μ μ¬μ©ν λ°©λ²μ΄λ€.
λͺ μμ νν νμ
ν¨μμ λν λ°ν νμ μ λν μ΄μ μ²λΌ νν νμ λ νμ μ λν μ΄μ μ μ¬μ©ν μ μλ€. ν¨μκ° νν νμ μ λ°ννλ€κ³ μ μΈλκ³ λ°°μ΄ λ¦¬ν°λ΄μ λ°ννλ€λ©΄ ν΄λΉ λ°°μ΄ λ¦¬ν°λ΄μ μΌλ°μ μΈ κ°λ³ κΈΈμ΄μ λ°°μ΄ λμ ννλ‘ κ°μ£Όλλ€.
function firstCharAndSizeExplicit(input: string): [string, number] {
return [input[0], input.length];
};
const μ΄μμ
λͺ μμ νμ μ λν μ΄μ μ νν νμ μ μ λ ₯νλ μμ μ λͺ μμ νμ μ λν μ΄μ μ μ λ ₯ν λμ λμΌν μ΄μ λ‘ κ³ ν΅μ€λ¬μΈ μ μλ€. μ¦ μ½λ λ³κ²½μ λ°λΌ μμ± λ° μμ μ΄ νμν ꡬ문μ μΆκ°ν΄μΌ νλ€.
νμ§λ§ κ·Έ λμμΌλ‘ νμ μ€ν¬λ¦½νΈλ κ° λ€μ λ£μ μ μλ const μ΄μμ μΈ as const μ°μ°μλ₯Ό μ 곡νλ€.
const unionArray = [1156, "a"]; // (string | number)[];
const readOnlyTuple = [11, "a"] as const; // readonly [1157, "a"]