[ν•œμž…] πŸ“’Day10 Quiz

TKΒ·2023λ…„ 12μ›” 16일
0

[κ°•μ˜] ν•œμž… μ‹œλ¦¬μ¦ˆ

λͺ©λ‘ 보기
42/59

Quiz1.

/*
[ 문제 μ†Œκ°œ ]
λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” 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;
}

Quiz2.

/*
[ 문제 μ†Œκ°œ ]
λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” 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[] 무슨 차이점이 μžˆμ„κΉŒ?


Quiz3.

/*
[ 문제 μ†Œκ°œ ]
λ‹€μŒ μš”κ΅¬μ‚¬ν•­μ„ λ§Œμ‘±ν•˜λŠ” 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;
}

profile
μ‰¬μš΄κ²Œ 쒋은 FE개발자😺

0개의 λŒ“κΈ€