Project/์—๋Ÿฌํ•ด๊ฒฐ

“Parsing error: Identifier expected.” ํ•ด๊ฒฐํ•˜๊ธฐ

sesam 2025. 11. 17. 14:14
728x90

๐Ÿ”ฅ TypeScript Optional Chaining์—์„œ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜

“Parsing error: Identifier expected.” ํ•ด๊ฒฐํ•˜๊ธฐ

TypeScript / ESLint๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 
Parsing error: Identifier expected.

์ฒ˜์Œ ๋ณด๋ฉด ๋ฌด์Šจ ๋ง์ธ์ง€ ๊ฐ์ด ์•ˆ ์˜ค๋Š” ์—๋Ÿฌ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์€ ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ž˜๋ชป๋œ optional chaining ์‚ฌ์šฉ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์‹ค์ œ๋กœ ํ”ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์„ ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค.


โŒ ์ž˜๋ชป๋œ ์ฝ”๋“œ ์˜ˆ์‹œ

์˜ˆ๋ฅผ ๋“ค์–ด API ์‘๋‹ต์„ ๋ฐ›์€ ๋’ค ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘๊ทผํ•˜๋ ค๊ณ  ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค:

 
const items = response?.data.map((v) => v.name); const firstItem = items?[0]; // โŒ Syntax Error

๊ฒ‰๋ณด๊ธฐ์—๋Š” ๋งž๋Š” ๊ฒƒ ๊ฐ™์ง€๋งŒ, items?[0] ๋Š” TypeScript ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ESLint๋Š” parsing error๋ฅผ ๋˜์ง„๋‹ค.

 
Parsing error: Identifier expected.

๐Ÿ” ์™œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ• ๊นŒ?

JavaScript / TypeScript์˜ optional chaining ๋ฌธ๋ฒ•์€ ์ •ํ•ด์ง„ ํ˜•ํƒœ๊ฐ€ ์žˆ๋‹ค.

  • ๊ฐ์ฒด ์ ‘๊ทผ → obj?.value
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ → fn?.()
  • ๋ฐฐ์—ด ์ ‘๊ทผ → arr?.[0]

์ฆ‰, ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ optional chaining์œผ๋กœ ์ ‘๊ทผํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ .?[0]์ด ์•„๋‹ˆ๋ผ ?.[0] ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ obj?[0] ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ๋ฌธ๋ฒ•์ ์œผ๋กœ ์™„์ „ํžˆ ์ž˜๋ชป๋œ ์ฝ”๋“œ๋‹ค.

ํŒŒ์„œ๋Š” ? ๋‹ค์Œ์— ์˜ฌ๋ฐ”๋ฅธ ์‹๋ณ„์ž(identifier)๊ฐ€ ์˜ค์ง€ ์•Š์œผ๋‹ˆ ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.


โœ… ์˜ฌ๋ฐ”๋ฅธ ์ฝ”๋“œ

 
const items = response?.data.map((v) => v.name); const firstItem = items?.[0]; // โญ• ์ •์ƒ ๋™์ž‘

์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•ด์•ผ TypeScript๊ฐ€:

  • items๊ฐ€ undefined๋ฉด → undefined ๋ฐ˜ํ™˜
  • items๊ฐ€ ๋ฐฐ์—ด์ด๋ฉด → ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜

์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.


๐Ÿงฉ ๋” ์•ˆ์ „ํ•˜๊ฒŒ null ๊ฐ’๋„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด?

API ์‘๋‹ต์ด null์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ??๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ์•ˆ์ „์„ฑ์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 
const firstItem = items?.[0] ?? '';

์ด ๊ฒฝ์šฐ:

  • items๊ฐ€ undefined → ''
  • items๊ฐ€ [] → ''
  • items[0]์ด null → ''
  • items[0]์ด string → ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜

๐Ÿ”Ž ์š”์•ฝ

์ƒํ™ฉ์˜๋ฏธ
โŒ arr?[0] TypeScript ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ → Parsing error ๋ฐœ์ƒ
โœ” arr?.[0] ์˜ฌ๋ฐ”๋ฅธ optional chaining ๋ฐฐ์—ด ์ ‘๊ทผ
โœ” arr?.[0] ?? '' undefined/null ๋Œ€๋น„๊นŒ์ง€ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ

๐ŸŽฏ ๊ฒฐ๋ก 

“Parsing error: Identifier expected.” ์—๋Ÿฌ๋Š” ๋Œ€๋ถ€๋ถ„ optional chaining ๋ฌธ๋ฒ•์„ ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.
ํŠนํžˆ ๋ฐฐ์—ด ์ ‘๊ทผ ์‹œ ๋ฌธ๋ฒ•์ด ๊นŒ๋‹ค๋กœ์šด๋ฐ, ์ •๋‹ต์€ ๋‹ค์Œ ํ•œ ์ค„์ด๋‹ค.

arr?.[0]

์ด๊ฑธ ๊ธฐ์–ตํ•˜๋ฉด ์•ž์œผ๋กœ ๋™์ผํ•œ ๋ฌธ์ œ๋กœ ๊ณ ์ƒํ•  ์ผ์ด ์—†๋‹ค.

728x90