λ°˜μ‘ν˜•

TypeScript 11

[TypeScript] νƒ€μž…μŠ€ν¬λ¦½νŠΈ μœ ν‹Έλ¦¬ν‹° νƒ€μž… Omit μ•Œμ•„λ³΄κΈ°

Introμ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μœ ν‹Έλ¦¬ν‹° νƒ€μž…μΈ Omit에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. μ°Έκ³ λ‘œ μœ ν‹Έλ¦¬ν‹° νƒ€μž… (Utility Types)은 TypeScriptμ—μ„œ κΈ°μ‘΄ νƒ€μž…μ„ λ³€ν˜•ν•˜κ±°λ‚˜ ν™•μž₯ν•˜μ—¬ μƒˆλ‘œμš΄ νƒ€μž…μ„ μ‰½κ²Œ 생성할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λ‚΄μž₯ νƒ€μž…λ“€μž…λ‹ˆλ‹€. TypeScriptλŠ” κ°•λ ₯ν•œ νƒ€μž… μ‹œμŠ€ν…œμ„ μ œκ³΅ν•˜λŠ” λ™μ‹œμ—, λ³΅μž‘ν•œ νƒ€μž… μ •μ˜λ₯Ό λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ 가지 μœ ν‹Έλ¦¬ν‹° νƒ€μž…μ„ μ œκ³΅ν•©λ‹ˆλ‹€. 이 νƒ€μž…λ“€μ€ νŠΉμ •ν•œ μž‘μ—…(예: 선택적 ν•„λ“œλ‘œ λ³€ν™˜, νŠΉμ • 속성 제거 λ“±)을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ 미리 μ •μ˜λœ ν…œν”Œλ¦Ώμ²˜λŸΌ μž‘λ™ν•©λ‹ˆλ‹€. Omit κΈ°λ³Έ 문법Omit은 TypeScriptμ—μ„œ μ œκ³΅ν•˜λŠ” μœ ν‹Έλ¦¬ν‹° νƒ€μž… μ€‘ ν•˜λ‚˜λ‘œ, νŠΉμ • κ°μ²΄ νƒ€μž…μ—μ„œ μ§€μ •λœ ν‚€λ₯Ό μ œκ±°ν•œ μƒˆλ‘œμš΄ νƒ€μž…을 μƒμ„±ν•˜λŠ” λ° μ‚¬μš©λ©λ‹ˆλ‹€. μ΄ μœ ν‹Έλ¦¬ν‹° νƒ€..

[TypeScript] μ œλ„€λ¦­ μ»΄ν¬λ„ŒνŠΈ (generic component) μ •μ˜ 및 μ‚¬μš©λ°©λ²•

이 글은 원글을 μ°Έκ³ ν•˜μ—¬ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. Definition TypeScript GenericsλŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ κ΅¬μ„±μš”μ†Œλ₯Ό μƒμ„±ν•˜λŠ” 방법을 μ œκ³΅ν•˜λŠ” λ„κ΅¬μž…λ‹ˆλ‹€. genericsλŠ” ν”„λ‘œκ·Έλž¨μ΄ μž₯기적으둜 ν™•μž₯κ°€λŠ₯ν•  뿐만 μ•„λ‹ˆλΌ μœ μ—°ν•  수 μžˆλ„λ‘ 보μž₯ν•΄μ€λ‹ˆλ‹€. Example # Props interface Props { renderItem: (item: T) => React.ReactNode; keyExtractor: (item: T) => string; data: T[]; } data: μ œλ„€λ¦­ νƒ€μž… Tλ₯Ό 받을 λ°°μ—΄ μš”μ†Œ renderItem: νƒ€μž… T의 react μš”μ†Œλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜ keyExtractor: ν‚€λ₯Ό μΆ”μΆœν•˜λŠ” ν•¨μˆ˜ # Component μ •μ˜ const GenericList = ({ data,..

[React] react + typescript + Chart.js Multi-Axis μ„€μ •ν•˜λŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. μ•žμ„  ν¬μŠ€νŒ…μ—μ„œ Multi type chartλ₯Ό κ΅¬ν˜„ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ΄€λŠ”λ°μš”, 이번 μ‹œκ°„μ—λŠ” Chart.jsμ—μ„œ Multi-Axis λ₯Ό μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. Multi-Axis 은 λ°μ΄ν„°μ˜ λ‹¨μœ„ 차이가 μ»€μ„œ ν•œκΊΌλ²ˆμ— ν‘œν˜„ν•  λ•Œ μœ μš©ν•©λ‹ˆλ‹€. How to do 제 경우 series1, series2 두 데이터에 μƒμ‘λ˜λŠ” y좕을 였λ₯Έμͺ½κ³Ό μ™Όμͺ½μ— ν‘œμ‹œν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. 각각 μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” 좕이 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— yAxisID 속성을 ν™œμš©ν•˜μ—¬ a, b λ‘κ°œλ₯Ό μ§€μ •ν–ˆμŠ΅λ‹ˆλ‹€. 이후 optionsμ—μ„œ ν•΄λ‹Ή yAxisIDλ₯Ό μ‚¬μš©ν•΄ position을 right, left둜 μ„€μ •ν•΄μ€¬μŠ΅λ‹ˆλ‹€. const series1: number[] = [] const series2: number[]..

Framework/React 2023.07.25

[React] react + typescript μ—μ„œ multitype λ©€ν‹°νƒ€μž… Chart.js μ‚¬μš©ν•˜λŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” react + typescript μ—μ„œ Chart.js λ₯Ό μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to do 제 μΌ€μ΄μŠ€μ˜ 경우 λ§‰λŒ€(bar) κ·Έλž˜ν”„μ™€ μ„ (line) κ·Έλž˜ν”„λ₯Ό ν•¨κ»˜ κ·Έλ €μ£Όκ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ λ¨Όμ € MutiTypeChart μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. # MutiTypeChart Component props둜 data, height, options 을 μ •μ˜ν•©λ‹ˆλ‹€. λ©€ν‹°νƒ€μž… 차트λ₯Ό μœ„ν•΄μ„œλŠ” Chart Component λ₯Ό μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. import React from 'react' import { BarController, BarElement, CategoryScale, Chart as ChartJS, ChartData, ChartOptions,..

Framework/React 2023.07.17

[Chart.js] YμΆ• μ΅œλŒ€κ°’ λ™μ μœΌλ‘œ μ„€μ •ν•˜λŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” Chart.jsμ—μ„œ YμΆ• μ΅œλŒ€κ°’μ„ λ™μ μœΌλ‘œ μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. Case μš°μ„  Chart μ»΄ν¬λ„ŒνŠΈλ₯Ό ν™œμš©ν•˜λŠ” 뢀뢄은 μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. option에 따라 ν‘œμ‹œν•˜λŠ” 데이터λ₯Ό λ‹€λ₯΄κ²Œ retrun ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 데이터가 λ™μ μœΌλ‘œ 달라지닀 λ³΄λ‹ˆ yμΆ• λ²”μœ„ μ΅œλŒ€κ°’λ„ ν•΄λ‹Ή datasets에 맞게 λ‹€λ₯΄κ²Œ ν‘œμ‹œν•΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. const getData = (option: string): ChartData['datasets'] => { if (option === 'hourly') { return [ { fill: false, ..., data: [0, 150, 180, 270, 210, 160, 160, 202, 265, 210, 270, 255, 290, 3..

Library 2023.06.28

[Understanding TypeScript] Section 1. μ‹œμž‘ν•˜κΈ°

이 글은 udemy의 Typescript :κΈ°μ΄ˆλΆ€ν„° μ‹€μ „ν˜• ν”„λ‘œμ νŠΈκΉŒμ§€ with React + NodeJS κ°•μ’Œλ₯Ό λ°”νƒ•μœΌλ‘œ μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€ 1. ν™˜μ˜ pass 2. TypeScriptλž€ 무엇이며 μ™œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”κ°€? νƒ€μž…μŠ€ν¬λ¦½νŠΈλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ superset μž…λ‹ˆλ‹€. μƒˆλ‘œ λ§Œλ“€μ–΄μ§„ μ–Έμ–΄κ°€ μ•„λ‹Œ μžλ°”μŠ€ν¬λ¦½νŠΈ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•΄ μƒˆλ‘œμš΄ κΈ°λŠ₯κ³Ό μž₯점을 μΆ”κ°€ν•˜λŠ” μ–Έμ–΄μž…λ‹ˆλ‹€. μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜μ—¬ νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œλ₯Ό JS둜 μ»΄νŒŒμΌν•˜λŠ” κ°•λ ₯ν•œ μ»΄νŒŒμΌλŸ¬μž…λ‹ˆλ‹€. νƒ€μž…μ„ μΆ”κ°€ν•˜μ—¬ λΈŒλΌμš°μ € λŸ°νƒ€μž„μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜κΈ° 전에 μ½”λ“œμ˜ μ—λŸ¬λ₯Ό 미리 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 개발 쀑 λŸ°νƒ€μž„ μ—λŸ¬λ‘œ λ°œμƒν•˜λŠ” μ—λŸ¬λ₯Ό μ΄ˆκΈ°μ— μˆ˜μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 단점) λΈŒλΌμš°μ €μ™€ 같은 μžλ°”μŠ€ν¬λ¦½νŠΈ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•  수 μ—†μŠ΅λ‹ˆλ‹€. node.js도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€. 3..

[TypeScript] Error: Redundant double negation. no-extra-boolean-cast 였λ₯˜ 원인 및 ν•΄κ²° 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ‚¬μš© 쀑 λ‹€μŒμ˜ μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. Error: Redundant double negation. no-extra-boolean-cast {text} Why μœ„ μ—λŸ¬λŠ” ESLint의 no-extra-boolean-cast κ·œμΉ™μœΌλ‘œ, λΆˆν•„μš”ν•œ λΆˆλ¦¬μ–Έ 캐슀트(뢈린 값을 κ°•μ œλ‘œ μΊμŠ€νŒ…ν•˜λŠ” 것)λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•œ κ·œμΉ™μž…λ‹ˆλ‹€. ν˜„μž¬ !!visible와 같은 ν˜•νƒœλ‘œ 뢈린 값을 κ°•μ œλ‘œ μΊμŠ€νŒ…ν•˜κ³  ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이미 λΆˆλ¦¬μ–Έ 값이 μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ— 이쀑 λΆ€μ • μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆˆλ¦¬μ–Έ 값이 될 ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. How to solve λ”°λΌμ„œ μ•„λž˜μ™€ 같이 이쀑 λΆ€μ • μ—°μ‚°μžλ₯Ό μ œκ±°ν•˜λ©΄ ESLint μ—λŸ¬κ°€ μ‚¬λΌμ§‘λ‹ˆλ‹€. visible 자체λ₯Ό μ‚¬μš©ν•΄λ„ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€. {text}

[TypeScript] Could not find a declaration file for module 였λ₯˜ 원인 및 ν•΄κ²° 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ‚¬μš© 쀑 λ‹€μŒμ˜ μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. Could not find a declaration file for module Why? 이 였λ₯˜ λ©”μ‹œμ§€λŠ” μ—°κ²°λœ declaration file 이 μ—†λŠ” νƒ€μž…μŠ€ν¬λ¦½νŠΈ μ½”λ“œ μ•ˆμ— λͺ¨λ“ˆμ΄λ‚˜ 라이브러리λ₯Ό μ‚¬μš©ν•  λ•Œ λ°œμƒν•˜λŠ” μ „ν˜•μ μΈ 였λ₯˜μž…λ‹ˆλ‹€. declaration file(.d.ts)λŠ” λͺ¨λ“ˆμ΄λ‚˜ 라이브러리의 types, functions 및 기타 속성을 μ„€λͺ…ν•˜κ³  νƒ€μž…μŠ€ν¬λ¦½νŠΈκ°€ μ½”λ“œμ—μ„œ 이듀을 μ‚¬μš©ν•˜λŠ” 방법을 이해할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€. λ”°λΌμ„œ μ„€μΉ˜λœ νŠΉμ • λͺ¨λ“ˆ/λΌμ΄λΈŒλŸ¬λ¦¬μ— λŒ€ν•œ type μ •μ˜κ°€ μ—†μ–΄ νƒ€μž…μŠ€ν¬λ¦½νŠΈμ—μ„œ 이해할 수 μ—†μœΌλ―€λ‘œ λ‹€μŒμ˜ 였λ₯˜κ°€ λ°œμƒν•œ κ²ƒμž…λ‹ˆλ‹€. How to solve the problem 이 였λ₯˜λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ”..

[React] typescript useRef μ‚¬μš©μ‹œ undefined / null 였λ₯˜ λ°œμƒ 원인 및 ν•΄κ²° 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” react μ—μ„œ useRef μ‚¬μš©μ‹œ undefined / null 였λ₯˜ λ°œμƒ 원인과 ν•΄κ²° 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μš°μ„  μ œκ°€ useRefλ₯Ό μ‚¬μš©ν•œ μ½”λ“œ μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. clientHeightλ₯Ό μ‘°μ ˆν•˜κΈ° μœ„ν•΄ useRefλ₯Ό μ‚¬μš©ν•˜μ—¬ div tag에 μ μš©ν–ˆμŠ΅λ‹ˆλ‹€. const divRef = useRef(null); const [handlePosition, setHandlePosition] = useState('300vh'); useEffect(() => { setHandlePosition(`${(divRef.current.clientHeight * 3) / 300}px`); }, []); return ( {/* some content */} ); ν•˜μ§€..

Framework/React 2023.03.29

[TypeScript] cannot read properties of undefined μ—λŸ¬ 원인 및 해결방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. νƒ€μž…μŠ€ν¬λ¦½νŠΈλ₯Ό μ‚¬μš©ν•˜λ˜ 도쀑 μ•„λž˜μ™€ 같은 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. Why? ν•΄λ‹Ή properties의 값을 읽을 수 μ—†κΈ° λ•Œλ¬Έμ— λ°œμƒν•˜λŠ” 였λ₯˜μž…λ‹ˆλ‹€. How to solve the problem ν•΄λ‹Ή μ—λŸ¬λ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 μ—¬λŸ¬κ°€μ§€μΈλ°μš”, μ €λŠ” κ·Έ μ€‘μ—μ„œλ„ Optional Chaining μ—°μ‚°μž (λ¬ΌμŒν‘œ μ—°μ‚°μž)λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 였λ₯˜λ₯Ό ν•΄κ²°ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. μ½”λ“œ μ‚¬μš© μ˜ˆμ œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. return ( {item?.name} ) μ΄λ ‡κ²Œ Optional Chaining μ—°μ‚°μž (λ¬ΌμŒν‘œ μ—°μ‚°μž)λ₯Ό μ‚¬μš©ν•  경우 μœ νš¨ν•œ 값이 없을 λ•ŒλŠ” undefinedλ₯Ό λ°˜ν™˜ν•˜κ³ , 값이 μžˆμ„ λ•ŒλŠ” Optional Chaining μ—°μ‚°μž 이후 λ‚΄μš©μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€. λ”°λΌμ„œ ν•΄λ‹Ή 였λ₯˜λ₯Ό 방지할 수 μžˆμŠ΅λ‹ˆλ‹€.

λ°˜μ‘ν˜•