π¨π» web.dev/js.ts10 DOM event.composed (shadow root λ°μΌλ‘ μ΄λ²€νΈ μ νμν€κΈ°) π CustomEvent κ° shadow root λ°μΌλ‘ μ νλμ§ μλλ€? shadow DOM κ³Ό ν¨κ» μμ νλ€λ³΄λ©΄ CustomEvent λ‘ μμ±ν μ΄λ²€νΈκ° shadow DOM boundary λ₯Ό λ²μ΄λμ μ ν λμ§ μλ μ΄μλ₯Ό λ§μ£Όνκ² λλλ°, μ΄λ μλλ λμμ λλ€. μμλ‘ μ΄ν΄λ΄ μλ€. λ€μκ³Ό κ°μ menu μ»΄ν¬λνΈκ° μλ€κ³ νκ² μ΅λλ€. μ¬μ¬μ©μ±μ μν΄ κ³΅ν΅ λ©λ΄ λ‘μ§μ λ΄μ μ»΄ν¬λνΈμ λλ€. μ½λλ λ¨μνμμΌ°μ§λ§, open μμ±μ΄ true κ° λλ©΄ ν΄λΉ λ©λ΄ μ리먼νΈμ overlay μ νμμ λ©λ΄λ₯Ό λ«κΈ° μν 컀μ€ν μ΄λ²€νΈλ₯Ό λ°μμν€λ νΈλ€λ¬λ₯Ό λΆμ°©νλ νλ¦μΌλ‘ μ§νλ©λλ€. export default class MyMenu extends HTMLElement { // ... other logics a.. 2023. 5. 15. TypeScript + Jest μ λ ν μ€νΈ μμ±νκΈ° μ΄λ² ν¬μ€νΈμμλ TypeScript νκ²½μμ Jest λ‘ μ λ ν μ€νΈλ₯Ό μ§ννκΈ° μν΄ νμν μ€μ λ€κ³Ό νμΈμ μν κ°λ¨ν μμ μ½λλ₯Ό μμ±ν΄λ³΄κ² μ΅λλ€. μ¬μ©ν ν μ€νΈ νλ μμν¬λ κ°μ₯ λμ€μ μΌλ‘ μ¬μ©λκ³ μλ Jest μ λλ€. π Jest μ€μ 1οΈβ£ ν¨ν€μ§ μ€μΉ λ¨Όμ νμν ν¨ν€μ§λ₯Ό μ€μΉν©λλ€. npm i -D jest @jest/globals ts-jest π‘ @jest/globals λͺ μμ μΈ import λ₯Ό μ νΈνκΈ°μ, ν΄λΉ ν¨ν€μ§λ₯Ό μ¬μ©ν΄μ jest api μ¬μ©νμ΅λλ€. π‘ ts-test TS λ‘λ λͺ¨λ ν μ€νΈλ₯Ό μνν λ μ»΄νμΌ + νμ 체ν¬κΉμ§ ν¨κ» μνν μ μλλ‘ ν΄μ€λλ€. 2οΈβ£ config νμΌ μΆκ° // jest.config.js /** @type {import('jest').Con.. 2022. 11. 27. async function μλ³νκΈ° π λ¬Έμ μν© μ¬λ΄ νλ‘μ νΈλ₯Ό μ§ννλ€κ° prop μΌλ‘ μ λ¬λ°μ ν¨μμ λ°νκ°μ λ°λΌμ κ·Έ λ€μ νΈμΆλλ μ‘μ νΈλ€λ¬λ₯Ό μ μ΄νκΈ° μν κ²½μ°κ° μκ²Όμ΅λλ€. μλλ μ΄λ₯Ό κ°λ΅νν μμ μ½λμ λλ€. interface ComponentProps { onAction: () => void onClick: () => unknown } export default function Component({ onClose }: ComponentProps) { // ... const handleClick = () => { onClick ? onClick() && onAction() : onAction() } return ( try me! ) } μ¬κΈ°μ onClick μ΄ λκΈ° ν¨μλΌλ©΄ μλ¬΄λ° λ¬Έμ κ° λ°μνμ§ μλλ°.. Promis.. 2022. 8. 8. [JavaScript] Debounce μ Throttle μ λν΄ μμ보μ π Debounce μ Throttle μ μ΄μ©ν μ΄λ²€νΈ μ²λ¦¬ debounce μ throttle μ κ³Όλν μ΄λ²€νΈ λ°μμΌλ‘ μΈν μ±λ₯ μ νλ₯Ό λ°©μ§νλ λ°©λ²μ λλ€. μ΄ λμ μΌμ μκ° κ°κ²©μ λκ³ μ΄λ²€νΈλ₯Ό νΈμΆνλ€λ λμΌν λͺ©νλ₯Ό κ°μ§κ³ μμ§λ§ μλ‘ λμ λ°©μμ΄ λ€λ¦ λλ€. π Debounce μ λμ λ°©μκ³Ό ꡬν 1οΈβ£ Debounce λμ μμ debounce λ μ΄λ²€νΈλ₯Ό κ·Έλ£Ήννμ¬ νλμ μ΄λ²€νΈλ§ νΈμΆλλλ‘ ν©λλ€. μ μμμ κ°μ΄ debounce λ μΌμ waiting time λμ ν¨μ νΈμΆμ΄ μλ κ²½μ° κ°μ₯ λ§μ§λ§ μ΄λ²€νΈλ₯Ό μ νν©λλ€. (trailing) μ΄ λμ μ κ°μ₯ μ²μ νΈμΆλ μ΄λ²€νΈλ₯Ό μ ννλ λ°©λ²λ μμ΅λλ€. (leading) 2οΈβ£ Debounce ꡬννκΈ° function deboun.. 2022. 7. 9. [TypeScript] enum κ³Ό union type, μΈμ μ¨μΌν κΉ? π TypeScript μμ μ°κ΄λ νμ μ μνκΈ° TypeScript λ₯Ό μ΄μ©ν΄μ κ°λ°μ νλ€λ³΄λ©΄ μλ‘ μ°κ΄λ κ°μ νμ μΌλ‘ μ μν λ enum νΉμ union type μ μ΄μ©ν΄μ μ μνκ² λ©λλ€. λκ°μ§ λ°©λ² μ€μμ μ΄λ€κ²μ΄ μ΅μ μΈμ§ νμ κ³ λ―Όμ΄ λμλλ° μ΄λ² κΈ°νμ λμ μ°¨μ΄μ μ λν΄μ μμλλ©΄ μ’μ κ² κ°μμ μ 리ν΄λ΄€μ΅λλ€. λ§μ½ λλ°μ΄μ€μ μ’ λ₯μ λν νμ μ string union μΌλ‘ μ μνλ€λ©΄ λ€μκ³Ό κ°μ΅λλ€. type DeviceType = "phone" | "desktop" | "pad" | "watch" μ΄λ₯Ό enum μ μ΄μ©ν΄μ νμ μ μ μνλ©΄ λ€μκ³Ό κ°μ΅λλ€. enum DeviceType { phone = 'phone', desktop = 'desktop', tablet = 'tab.. 2022. 7. 9. [JavaScript] Array.sort λ μμ μ±μ 보μ₯ν κΉ? JavaScript μ sort ν¨μλ μμ μ λ ¬μΌκΉ? π μμ μ λ ¬μ΄λ? μμ μ λ ¬(stable sort) μ λμΌν ν€ κ°μ λν΄ μ λ ₯ μμλ₯Ό 보μ₯νλ μ λ ¬ μκ³ λ¦¬μ¦μ λλ€. κ·Έ λ°λμΈ λΆμμ μ λ ¬(unstable sort) μ μ λ ¬ ν μ λ ₯ μμλ₯Ό 보μ₯ν΄μ£Όμ§ μμ΅λλ€. λνμ μΈ μμ μ λ ¬ μκ³ λ¦¬μ¦μ λ€μκ³Ό κ°μ΄ 3κ°μ§κ° μμ΅λλ€. 1οΈβ£ λ²λΈ μ λ ¬ (Bubble Sort) 2οΈβ£ μ½μ μ λ ¬ (Insertion Sort) 3οΈβ£ λ³ν© μ λ ¬ (Merge Sort) κ·Έ μΈ ν΅ μ λ ¬ κ³Ό μ ν μ λ ¬ μ λΆμμ μ λ ¬ μ λνμ μΈ μκ³ λ¦¬μ¦μ λλ€. π JavaScript μ sort ν¨μ JavaScript μ sort ν¨μλ μμ μ λ ¬μΌκΉ? JavaScript μ sort ν¨μλ κ·Έλ λ€λ©΄ μμ μ λ ¬ μΌκΉμ? Ch.. 2022. 3. 9. μ΄μ 1 2 λ€μ