/*
[ λ¬Έμ μκ° ]
λ€μ μꡬμ¬νμ λ§μ‘±νλ func ν¨μμ νμ
μ μ μνμΈμ
- func ν¨μλ 맀κ°λ³μλ₯Ό κ·Έλλ‘ λ°ννλ ν¨μμ
λλ€.
- 맀κ°λ³μ valueμλ λͺ¨λ νμ
μ κ°μ΄ λ€μ΄μ¬ μ μμ΅λλ€.
- λ°νκ°μ νμ
μ 맀κ°λ³μλ‘ μ λ¬λ κ°μ νμ
κ³Ό κ°μ΅λλ€.
- ex) valueμ κ°μ΄ 1μΌ κ²½μ° λ°νκ°μ number νμ
μ
λλ€.
- ex) valueμ κ°μ΄ 'hi'μΌ κ²½μ° λ°νκ°μ string νμ
μ
λλ€.
- ex) valueμ κ°μ΄ [1,2]μΌ κ²½μ° λ°νκ°μ number[] νμ
μ
λλ€.
*/
/* [Quiz] μλμ μ½λλ₯Ό μμ νμΈμ */
function func(value: any) {
return value;
}
/* [Test] μ¬κΈ°λΆν°λ μ λ΅μ 체ν¬νκΈ° μν μ©λλ‘ μμ νμ§ μμ΅λλ€ */
import { Equal, Expect, NotAny } from "@type-challenges/utils";
const tc1: number = func(1);
const tc2: string = func("hello");
const tc3: boolean = func(true as boolean);
const tc4: number[] = func([1, 2, 3]);
type TestCases = [
Expect<NotAny<Parameters<typeof func>[0]>>, // 첫λ²μ§Έ νλΌλ―Έν°κ° any νμ
μ΄ μλ κ²
Expect<Equal<typeof tc1, number>>,
Expect<Equal<typeof tc2, string>>,
Expect<Equal<typeof tc3, boolean>>,
Expect<Equal<typeof tc4, number[]>>
];
function func<T>(value: T) {
return value;
}
/*
[ λ¬Έμ μκ° ]
λ€μ μꡬμ¬νμ λ§μ‘±νλ getLastValue ν¨μμ νμ
μ μ μνμΈμ
- getLastValue ν¨μλ 맀κ°λ³μλ‘ λ°°μ΄μ λ°μ λ°°μ΄μ λ§μ§λ§ κ°μ λ°ννλ ν¨μμ
λλ€.
- 맀κ°λ³μ dataμλ λΉ λ°°μ΄μ μ μΈν λͺ¨λ λ°°μ΄μ΄ λ€μ΄μ¬ μ μμ΅λλ€.
- λ°νκ°μ νμ
μ 맀κ°λ³μ data λ°°μ΄μ λ§μ§λ§ μμμ νμ
μ΄μ΄μΌ ν©λλ€.
- ex) data λ°°μ΄μ κ°μ΄ [1, "hello"] μΌ κ²½μ° λ°νκ°μ string νμ
μ
λλ€.
- ex) data λ°°μ΄μ κ°μ΄ ["hello", 1] μΌ κ²½μ° λ°νκ°μ number νμ
μ
λλ€.
*/
/* [Quiz] μλμ μ½λλ₯Ό μμ νμΈμ */
function getLastValue(data: any) {
return data[data.length - 1];
}
/* [Test] μ¬κΈ°λΆν°λ μ λ΅μ 체ν¬νκΈ° μν μ©λλ‘ μμ νμ§ μμ΅λλ€ */
const a: string = getLastValue([1, 2, "3"]);
const b: boolean = getLastValue([1, 2, true]);
import { Equal, Expect, NotAny } from "@type-challenges/utils";
const tc1 = getLastValue([1, 1]);
const tc2 = getLastValue([1, "2"]);
const tc3 = getLastValue([1, true]);
const tc4 = getLastValue([1, undefined]);
type TestCases = [
Expect<NotAny<Parameters<typeof getLastValue>[0]>>, // 첫λ²μ§Έ νλΌλ―Έν°κ° any νμ
μ΄ μλ κ²
Expect<Equal<typeof tc1, number>>,
Expect<Equal<typeof tc2, string>>,
Expect<Equal<typeof tc3, boolean>>,
Expect<Equal<typeof tc4, undefined>>
];
function getLastValue<T>(data: [...any[], T]) {
return data[data.length - 1];
}
function getLastValue<T>(data: [...any, T]) {
return data[data.length - 1];
}
β¦any vs β¦unknown[] λ¬΄μ¨ μ°¨μ΄μ μ΄ μμκΉ?
/*
[ λ¬Έμ μκ° ]
λ€μ μꡬμ¬νμ λ§μ‘±νλ map ν¨μμ νμ
μ ꡬννμΈμ
- map ν¨μλ μλ°μ€ν¬λ¦½νΈ λ°°μ΄ λ©μλ mapμ λ³Έλ° λ§λ ν¨μμ
λλ€.
- 2κ°μ 맀κ°λ³μ arrκ³Ό callbackμ λ°μ΅λλ€.
- arr λ°°μ΄μ λͺ¨λ μμμ callback ν¨μλ₯Ό μνν κ²°κ³Όλ₯Ό λ°°μ΄λ‘ λͺ¨μ λ°νν©λλ€.
*/
/* [Quiz] μλμ μ½λλ₯Ό μμ νμΈμ */
function map(arr, callback) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]));
}
return result;
}
/* [Test] μ¬κΈ°λΆν°λ μ λ΅μ 체ν¬νκΈ° μν μ©λλ‘ μμ νμ§ μμ΅λλ€ */
import { Equal, Expect, NotAny } from "@type-challenges/utils";
const tc1: number[] = map([1, 2, 3], (item) => item);
const tc2: string[] = map([1, 2, 3], (item) => item.toString());
type TestCases = [
Expect<NotAny<Parameters<typeof map>[0]>>,
Expect<NotAny<Parameters<typeof map>[1]>>,
Expect<Equal<typeof tc1, number[]>>,
Expect<Equal<typeof tc2, string[]>>
];
function map<T, U>(arr: T[], callback: (item:T) => U) {
let result = [];
for (let i = 0; i < arr.length; i++) {
result.push(callback(arr[i]));
}
return result;
}