TypeScript 6

[TypeScript] ์ œ๋„ค๋ฆญ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

์ œ๋„ค๋ฆญ(Generic)์ด๋ž€?C๋‚˜ ์ž๋ฐ” ๊ฐ™์€ ์ •์  ์–ธ์–ด์—์„œ ๋‹ค์–‘ํ•œ ํƒ€์ž… ๊ฐ„์— ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฌธ๋ฒ•์ด๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋„ ์ •์  ํƒ€์ž…์„ ๊ฐ€์ง€๋ฏ€๋กœ ์ œ๋„ค๋ฆญ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•œ๋‹ค.์ œ๋„ค๋ฆญ์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฒƒ(general)์„ ๋œปํ•˜๋Š”๋ฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์ œ๋„ค๋ฆญ๋„ ์ด์™€ ๋น„์Šทํ•˜๊ฒŒ '์ผ๋ฐ˜ํ™”๋œ ๋ฐ์ดํ„ฐ' ํƒ€์ž…์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.์ œ๋„ค๋ฆญ: ํ•จ์ˆ˜, ํƒ€์ž…, ํด๋ž˜์Šค ๋“ฑ์—์„œ ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉํ•  ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘์ง€ ์•Š๊ณ  ํƒ€์ž… ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ์œ„์น˜๋ฅผ ๋น„์›Œ ๋‘” ๋‹ค์Œ์—, ์‹ค์ œ๋กœ ๊ทธ ๊ฐ’์„ ์‚ฌ์šฉํ•  ๋•Œ ์™ธ๋ถ€์—์„œ ํƒ€์ž… ๋ณ€์ˆ˜ ์ž๋ฆฌ์— ํƒ€์ž…์„ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹-> ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•จ์ˆ˜, ํƒ€์ž…, ํด๋ž˜์Šค ๋“ฑ ์—ฌ๋Ÿฌ ํƒ€์ž…์— ๋Œ€ํ•ด ํ•˜๋‚˜ํ•˜๋‚˜ ๋”ฐ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์žฌ์‚ฌ์šฉ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค.ํƒ€์ž… ๋ณ€์ˆ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์™€ ๊ฐ™์ด ๊บพ์‡ ๊ด„ํ˜ธ ๋‚ด๋ถ€์—..

React, JSX | input ์˜ค๋Š˜ ๋‚ ์งœ, ํ˜„์žฌ ์‹œ๊ฐ์œผ๋กœ defaultValue ์„ค์ •ํ•˜๊ธฐ

์˜ค๋Š˜ ๋‚ ์งœ, ํ˜„์žฌ ์‹œ๊ฐ ๊ฐ€์ ธ์˜ค๊ธฐ const getDefaultDate = () => { const today = new Date(); const year = today.getFullYear(); const month = (today.getMonth() + 1).toString().padStart(2, '0'); const day = today.getDate().toString().padStart(2, '0'); const hours = today.getHours().toString().padStart(2, '0'); const minutes = today.getMinutes().toString().padStart(2, '0'); const seconds = today.getSeconds().toStrin..

React, TypeScript | ์„œ๋ฒ„ ์—‘์…€ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋Šฅ

interface IDownloadExcelParams { responseType?: ResponseType; } const fileAPI = { downloadExcel: (params: IDownloadExcelParams) => { return JSON.get(`file/excel`, params); }, } API ์ •์˜ ๋ถ€๋ถ„ const [isDownloading, setIsDownloading] = useState(false); const downloadTemplate = async () => { try { setIsDownloading(true); const response = await fileAPI.downloadExcel({ responseType: 'blob', }); if (respon..

[TypeScript] ๊ฐ์ฒด์˜ ํƒ€์ž… ์ •์˜, keyof typeof ์‚ฌ์šฉ๋ฒ•

1. ํ‚ค(Key)์™€ ํ”„๋กœํผํ‹ฐ(Property) ๊ฐ์ฒด(Object)๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋‹ค. ๊ฐ์ฒด ์•ˆ์˜ ๊ฐ ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ํ”„๋กœํผํ‹ฐ๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ํ”„๋กœํผํ‹ฐ๋Š” ์ด๋ฆ„(ํ‚ค)๊ณผ ๊ฐ’์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. const person = { name: 'Alice', age: 30, job: 'Engineer' }; name, age, job์€ key์ด๊ณ  Alice, 30, Engineer์€ ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 2. ํƒ€์ž…(Type) ํƒ€์ž…์€ ๋ณ€์ˆ˜, ๋งค๊ฐœ๋ณ€์ˆ˜, ํ•จ์ˆ˜ ๋“ฑ์— ์–ด๋–ค ์ข…๋ฅ˜์˜ ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ช…์‹œํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. TypeScript์—์„œ๋Š” ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜์˜ ์ธ์ž ๋“ฑ์˜ ๊ฐ’์ด ์–ด๋–ค ํ˜•ํƒœ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. const age: n..

[TypeScript] Type 'string | undefined' is not assignable to type 'string'. ํ•ด๊ฒฐ๋ฒ•

TypeScript ์—์„œ ๋ณ€์ˆ˜๊ฐ€ string ํ˜•ํƒœ์—ฌ์•ผ ํ•˜๋Š”๋ฐ undefined์ผ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํƒ€์ž… ์—๋Ÿฌ๋กœ, ํ”ํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ์ฑ…์€, ๊ฐ’์ด undefined์ผ ๊ฒฝ์šฐ ๋นˆ ๋ฌธ์ž์—ด์ธ ''์„ ํ• ๋‹นํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜๋Š” ๊ทธ ์˜ˆ์‹œ์ด๋‹ค. const userName: string = userDetails?.userName || '';

[TypeScript] is possibly 'undefined' ์—๋Ÿฌ ํ•ด๊ฒฐ๋ฒ•

๋‹ค์Œ ์ฝ”๋“œ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? {relData?.totalElements > 1 && ( handleChangeRepPopup(!showChangeRepPop)} style={{ marginRight: '10px' }} > {t('button.filecomponent.changeRep')} )} → 'relData.totalElements' is possibly 'undefined'. ์ฝ˜์†”์— ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ์ถœ๋ ฅ ๋œ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ, relData.totalElements ๊ฐ€ undefined ์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด ์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ relData && relData.totalElements > 1 && ( ์ด๋ ‡๊ฒŒ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. relData๊ฐ€ ์กด์žฌํ•  ๋•Œ๋งŒ ๋‹ค์Œ..