Typescript: --isolatedModules ๋ฐ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€์—†๋Š” "๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์—†์Œ"์˜ค๋ฅ˜

์— ๋งŒ๋“  2017๋…„ 04์›” 17์ผ  ยท  52์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

TypeScript ๋ฒ„์ „ : ์•ผ๊ฐ„ (2.3.0-dev.20170417)

์•”ํ˜ธ

function f() {}

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

--isolatedModules ํ”„๋กœ์ ํŠธ์˜ ๋ชจ๋“ˆ์ด ์•„๋‹Œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ๋˜๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™ :

src/a.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.

์ด๊ฒƒ์€ program.ts verifyCompilerOptions ์—์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์„ ์–ธ์ด ์•„๋‹Œ ์†Œ์Šค ํŒŒ์ผ์„ ์ฐพ๊ณ  ๊ทธ๊ฒƒ์ด ๋ฌด์—‡์ด๋“ ๊ฐ„์— ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ์—์„œ ์‹คํŒจํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์•„๋‹Œ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์‹ค์ œ ์ด์œ ๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋˜๋Š” ๊ฐ€์ ธ ์˜ค๊ธฐ์—†์ด ํŒŒ์ผ ๋งŒ ํ—ˆ์šฉํ•˜๊ณ ์ด ์˜ค๋ฅ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์ „์— ์‹ค์ œ๋กœ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Bug Error Messages help wanted

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.

๋ชจ๋“  52 ๋Œ“๊ธ€

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋” ๋ช…ํ™•ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. namespaces ๋Œ€์‹  non-module ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @DanielRosenwasser ์ถ”์ฒœ?

์ด ์ƒํ™ฉ์—์„œ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. --isolatedModules ์˜ต์…˜์€ ๋‚ด๋ถ€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์™„์ „ํžˆ ๊บผ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ tsc๊ฐ€ ์—ฌ์ „ํžˆ ์ด๋Ÿฐ ์‹์œผ๋กœ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค๋ฉด ์˜ต์…˜์ด ์ œ ์—ญํ• ์„ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

# 15839์—์„œ ๋‚˜๋Š” ๊ฒ€์‚ฌ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๋‚˜์ค‘์—์ด ๊ฒ€์‚ฌ๊ฐ€ ๋ฌด์˜๋ฏธํ•˜๊ณ  ์ด์ƒ์ ์ธ ํ•ด๊ฒฐ์ฑ…์€ ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž„์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.
Typescript๋Š” ํ•ญ์ƒ --isolatedModules ์žˆ๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ ๋‚ด๋ถ€์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

export function something() {} // export found, so this module is considered 'external'
namespace ns {} // namespace is still valid in an external module

๋”ฐ๋ผ์„œ ์ˆ˜ํ‘œ๋Š” ๋ถˆ๋งŒ์„ ์ œ๊ธฐํ•ด์•ผ ํ•  ๋•Œ (์œ ํšจํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”) ๊ฒฝ์šฐ์— ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•„๋ฌด ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์•„๋ฌด ์ž˜๋ชป๋„ํ•˜์ง€ ์•Š๊ณ  ๋ถˆํ‰ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@wilonth ์ด ๋ฌธ์ œ์˜ ์ด์œ ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ž˜๋ชป ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (es6) ๋ชจ๋“ˆ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋Š” ์™„๋ฒฝํ•˜์ง€๋งŒ ๋ชจ๋“ˆ์ด ์•„๋‹Œ ํŒŒ์ผ์€ ์˜ค๋ฅ˜ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

@ andy-ms์ด ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•˜๊ธฐ์œ„ํ•œ ์ „์ฒด ์ฝ”๋“œ๋Š” ๋ฌด์˜๋ฏธํ•˜๋ฉฐ ์ฝ”๋“œ๋ฅผ ๋” ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ์ œ๊ฑฐํ•ด์•ผํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด ์š”์ ์€ --isolatedModules ๊ฐ€ ์ผœ์ ธ์žˆ์„ ๋•Œ ๋ชจ๋“  ํŒŒ์ผ์ด ์™ธ๋ถ€ (ES6) ๋ชจ๋“ˆ ์ธ ๋งˆ์นจํ‘œ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ์€ ํ•ฉ๋ฒ•์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ES6 ๋ชจ๋“ˆ ๋‚ด์—์„œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์™„๋ฒฝํ•˜๊ฒŒ ํ•ฉ๋ฒ•์ ์ž…๋‹ˆ๋‹ค ( --isolatedModules ์‚ฌ์šฉ).

๋‚ด ์š”์ ์€ --isolatedModules๊ฐ€ ์ผœ์ ธ์žˆ์„ ๋•Œ ๋ชจ๋“  ํŒŒ์ผ์ด ์™ธ๋ถ€ (ES6) ๋ชจ๋“ˆ ์ธ ๊ธฐ๊ฐ„์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜๋ฏธ๋ก ์€ ๋ชจ๋“ˆ์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์ตœ์ƒ์œ„ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€์žˆ๋Š” ํŒŒ์ผ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@mhegazy ์˜ˆ ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ทœ์น™์€ ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์—์žˆ๋Š” ๋ฌธ์ œ์˜ ๊ทผ์›์ž…๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€์—†๋Š” ํŒŒ์ผ์„ ๋ ˆ๊ฑฐ์‹œ ๋‚ด๋ถ€ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ์ผ๋ถ€๋กœ ๋ถ€๋‹นํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜๋ฏ€๋กœ --isolatedModules ๋Š” ํŒŒ์ผ์„ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ ๊ทœ์น™์„ ๋ณ€๊ฒฝํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ํ˜„์žฌ ๋ฌธ์ œ๋ฅผ ๋งค์šฐ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด "cannot compile namespaces"์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค๊ณ  ์ƒ์ƒํ•ด ๋ด…์‹œ๋‹ค. ๋ฌด์—‡์ด ์ž˜๋ชป ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? Typescript ์ปดํŒŒ์ผ๋Ÿฌ ์ž์ฒด์™€ ๊ฐ™์ด ๋‚ด๋ถ€ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? --isolatedModules ๋ฅผ ์ผœ๋ฉด ๊ฐ€๋น„์ง€ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ์‚ฌ์šฉ์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒํ• ๊นŒ์š”? ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. --isolatedModules ๊ฐ€ ํŒŒ์ผ ์‚ฌ์ด์˜ ๋งํฌ๋ฅผ ๊นจ๋œจ ๋ ธ๊ธฐ ๋•Œ๋ฌธ์— ์ •์˜๋˜์ง€ ์•Š์€ ๊ธฐํ˜ธ์— ๋Œ€ํ•œ Typescript ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์–ด๋–ค ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ์ œ๋กœ ์ž‘์—… (์ค„๋งŒ ์ œ๊ฑฐ)๊ณผ ๋‹จ์ ์ด์—†๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ์†”๋ฃจ์…˜์„ ์„ ํƒํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

--isolatedModules๋ฅผ ์ผœ๋ฉด ๊ฐ€๋น„์ง€ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผ๋˜์–ด ์‚ฌ์šฉ์ž๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒํ• ๊นŒ์š”? ์•„๋‹ˆ์š”

๋„ค, ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

--isolatedModules ํ”Œ๋ž˜๊ทธ์˜ ์š”์ ์€ ๋‹จ์ผ ํŒŒ์ผ ๋ณ€ํ™˜์„ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

TypeScript ์ฝ”๋“œ๋ฒ ์ด์Šค ๋Š” ๋‹จ์ผ ํŒŒ์ผ ํŠธ๋žœ์Šค ํŒŒ์ผ์„ ํ†ตํ•ด ์„ฑ๊ณต์ ์œผ๋กœ ์ปดํŒŒ์ผ

file1

namespace ts {
  export var x = 10;
}

file2

namespace ts {
  var y = x; // transpiles to ts.x during whole-program compilation
}

๋‹จ์ผ ํŒŒ์ผ๋กœ file2๋ฅผ ํŠธ๋žœ์Šค ํŒŒ์ผํ•˜๋ฉด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๋‚ด ๋‚˜์œ, ๋‚ด ํ…Œ์ŠคํŠธ๋ฅผ ๋ง์ณค์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ œ์•ˆ์„ ์ฒ ํšŒํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ธฐ์‹œ์ผœ ์ฃผ์‹  @RyanCavanaugh ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค.์ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์ „์— ์‹ค์ œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์‚ฌ์šฉ์„ ๊ฐ์ง€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : @ andy-ms๊ฐ€ ์ œ์•ˆํ•œ "๋Œ€์•ˆ"์†”๋ฃจ์…˜). ์ด ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์™„์ „ํžˆ ์ž˜๋ชป ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ…์ŠคํŠธ๋ฅผ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
PR์„ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๊ทธ ๋ชจ๋“  ํ—›์†Œ๋ฆฌ๋ฅผ ๋ฑ‰์–ด ๋‚ธ ํ›„์—๋„ ์—ฌ์ „ํžˆ ์—ฌ๊ธฐ์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

A global file cannot be compiled using '--isolatedModules'. Ensure your file contains imports, exports, or an 'export {}' statement.

๋‹จ์ผ ํŒŒ์ผ๋กœ file2๋ฅผ ํŠธ๋žœ์Šค ํŒŒ์ผํ•˜๋ฉด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค.

๊ฐ•๋ น์ˆ ์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•˜์ง€๋งŒ ๋ชจ๋“ˆ์„ ๋Œ€์ƒ์œผ๋กœ ํ•  ๋•Œ 'x' is not defined ์™€ ๊ฐ™์ด ์‹คํŒจํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ๊ฑด์€ ๋‚˜์—๊ฒŒ ์‚ฌ์†Œํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

file1

var x = 10;

file2

var y = x;

๋ชจ๋“ˆ์ด ์•„๋‹Œ ์—ฐ๊ฒฐ / ์ „์—ญ ์ ์œผ๋กœ ํ‰๊ฐ€ํ•  ๋•Œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. namespaces ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ณธ์งˆ์ ์œผ๋กœ import ๋˜๋Š” export ์—†๋Š” ํŒŒ์ผ์ด module ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์—์„œ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์–ด์•ผํ•˜๋Š”๋ฐ ์™œ typescript๊ฐ€ ๋ชจ๋“ˆ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ถ”์ธก ํ•˜๋Š”๊ฐ€? ์˜ˆ๋ฅผ ๋“ค์–ด Typescript ์ž์ฒด๋Š” module ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ปดํŒŒ์ผ๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ none ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—ฐ๊ฒฐ / ์ „์—ญ ํ‰๊ฐ€๋ฅผ ๊ฐ€์ • ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

--module <something> ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์€ ์„ ์–ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (๋„ค์ž„ ์ŠคํŽ˜์ด์Šค ์ž์ฒด ํฌํ•จ) typescript๋Š” ์ด๋ฏธ --isolatedModules ์ด์ „์— "์ •์˜๋˜์ง€ ์•Š์Œ"์œผ๋กœ ์‹คํŒจํ•˜๊ณ  export {} ์ดํ›„์—๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์–ด๋–ค ์ด์œ ๋กœ import / export ๋ฅผ --module none --isolatedModules ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„ ์ฑ˜๋Š”๋ฐ, ์ด๊ฒƒ์€ ๋‹ค์†Œ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ๋ฒ„๊ทธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ตœ์ข… ์‚ฌ์šฉ์ž๋กœ์„œ @DanielRosenwasser : "์ „์—ญ ํŒŒ์ผ"์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ž˜๋„ ์•ˆ๋‚ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ "import ๋˜๋Š” export ๋ฌธ์ด์—†๋Š” ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ด ์•„๋‹ˆ๋ฉฐ '--isolatedModules'๋กœ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.์ด ํŒŒ์ผ์ด ๋ถ€์ž‘์šฉ์— ๋Œ€ํ•ด์„œ๋งŒ ํ‰๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ 'export {}'๋ฌธ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค." -์–ธ์–ด๊ฐ€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ.

๊ฐ„๋‹จํ•œ js ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋งŒ๋“  ์ƒ˜ํ”Œ js ํ”„๋กœ์ ํŠธ๋Š” ํŒจํ‚ค์ง€ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Package.json
{
"plnkr": {
"๋Ÿฐํƒ€์ž„": "์‹œ์Šคํ…œ"
}
}

lib / script.js
//
//๊ณค๋ด‰
// Dheeraj Kumar ์ œ์ž‘
//

let card1 = "์ŠคํŽ˜์ด๋“œ ์—์ด์Šค",
card2 = "ํ•˜ํŠธ 10 ๊ฐœ";

console.log ( '๋ธ”๋ž™ ์žญ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!');

console.log ( "๋‹น์‹ ์€ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค :");
conosle.log ( ""+ card1);
console.log ( ""+ card2);

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์ข…์ข… ์ž‘์€ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์ด๊ฒƒ์„ํ•œ๋‹ค.

describe('jest', () => {
  it('finds this test', () => {
    expect(true).toBeTruthy();
  });

  it('parses this typescript', () => {
    const actual: number = 0;
    const expected: number = 0;
    expect(actual).toEqual(expected);
  });
});

export {
  // Use an empty export to please Babel's single file emit.
  // https://github.com/Microsoft/TypeScript/issues/15230
}

๋‚˜๋Š” ์ •๋ง TypeScript๊ฐ€ import / export ๋ฌธ์„ ํฌํ•จํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  .ts ํŒŒ์ผ์„ ES6 ๋ชจ๋“ˆ๋กœ ๊ฐ„์ฃผํ•˜๋„๋กํ•˜๋Š” ์˜ต์…˜์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ --isolatedModules ์˜ต์…˜์ด ํ•ด๋‹น ์˜ต์…˜์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์ง€๋งŒ ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€์—†๋Š” ํŒŒ์ผ์—์„œ ๋งค์šฐ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. (๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ์˜ํ•ด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)์ด ์„ค์ •์„ ์›ํ•˜๋Š” ์ด์œ ๋Š” ์‹ค์ˆ˜๋กœ ์ฐธ์กฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— TypeScript์—์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํฌ์ฐฉํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์„œ๋กœ๋ฅผ ์ฐธ์กฐ ํ•  ์ˆ˜์—†๋Š” node / parcel / webpack์„ ์‚ฌ์šฉ ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ•œ .ts ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ๋ณ€์ˆ˜ (๋‘˜ ๋‹ค ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฌธ์ด ์—†์—ˆ์œผ๋ฏ€๋กœ TypeScript๊ฐ€์ด๋ฅผ ES6 ๋ชจ๋“ˆ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Œ) ๋‚ด ๋ณด๋‚ด์ง€ ์•Š์€ ๋ณ€์ˆ˜.

๋‚˜๋Š” ์ผ์ข…์˜ ๊ด€๋ จ ์„ฑ๊ฐ€์‹ฌ์„ ๊ณ ์น˜๋ ค๊ณ  ์—ฌ๊ธฐ์— ์„ฐ๋‹ค. ์•„๋ž˜ ์„ค๋ช…์€ create-react-app ๋ฐ TypeScript๋กœ์ด ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•˜๋Š” ๋‹ค๋ฅธ VS Code ์‚ฌ์šฉ์ž๋ฅผ ๋•๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

create-react-app 2.x ๋ฐ TypeScript ๋กœ ํ”„๋ก์‹œ ๋ฅผ setupProxy.js ๋ผ๋Š” ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

const proxy = require('http-proxy-middleware');
module.exports = function(app) { /* ... */ };

react-scripts ๋Š” ts ๋ณ€ํ™˜ ํ”„๋กœ์„ธ์Šค ์™ธ๋ถ€์—์„œ์ด ํŒŒ์ผ์„ ์ฝ์œผ๋ฏ€๋กœ ์ผ๋ฐ˜ js ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ฌธ์„œํ™” ๋œ๋Œ€๋กœ ์ •ํ™•ํ•˜๊ฒŒ ์ž‘๋™ ํ•˜์ง€๋งŒ ์„ฑ๊ฐ€์‹  ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

tsconfig.json ์ƒ์„ฑ ๋œ react-scripts ์—๋Š” src ๋ฅผ ํฌํ•จํ•˜์—ฌ setupProxy.js src ๋ชจ๋“  ํŒŒ์ผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ณด์—ฌ VS ์ฝ”๋“œ๋ฅผ ํŠธ๋ฆฌ๊ฑฐ Cannot compile namespaces... ์˜ค๋ฅ˜ setupProxy.js ๋นจ๊ฐ„์ƒ‰ SQUIGGLE์™€ ์ฝ”๋“œ๋ฅผ ํ‘œ์‹œํ•˜๊ณ  ๋ฌธ์ œ ์ฐฝ์— ํฌํ•จ. ๋‚ด ์„ค์ •์—์„œ ํŒŒ์ผ๊ณผ ๋ชจ๋“  ์ƒ์œ„ ํด๋”๊ฐ€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ๊ฐ•์กฐ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ์ฑ… : tsconfig.json์—์„œ setupProxy.js ํŒŒ์ผ์„ ์ œ์™ธํ•˜์—ฌ VS Code ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

{
  // ...
  "exclude": ["src/setupProxy.js"]
}

react-scripts ๋Š” isolatedModules: true react-scripts ๊ฐ•์ œํ•˜์ง€๋งŒ exclude ์„ ๋ฎ์–ด ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋Œ€์•ˆ : `setupProxy.js์— ๋ช…๋ช… ๋œ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

export const _ = '';

์ตœ์ƒ์œ„ ์ˆ˜์ค€ ๋‚ด๋ณด๋‚ด๊ธฐ์—์„œ๋Š” ์ด์ œ --isolatedModules์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

copliation์— ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผํ•˜๋Š” ํŒŒ์ผ (gulp.js ๋“ฑ)์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š”์ด ๋ฉ”์‹œ์ง€๋ฅผ ์ž์ฃผ๋ฐ›์Šต๋‹ˆ๋‹ค.

์ฃผ์˜-create-react-app์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ ์ด ๋ฌธ์ œ๊ฐ€ ์ €์ฒ˜๋Ÿผ ๋ณด์ด๋ฉด ... ๋‚ด tsconfig.json ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ์šฐํšŒ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ....

๋‹ค์Œ ๋ณ€๊ฒฝ

    "isolatedModules": true,

...์—

    "isolatedModules": false,

@UncleFifi ๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ์œ ํ˜• ๊ฒ€์‚ฌ์—์„œ ๋ฐ”๋ฒจ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜์œผ๋กœ ์ด๋™ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@jtbennett export {}; - export { name, localName as exportName }; ์˜ ํ‡ด๋ณด ํ˜•์‹์œผ๋กœ ์•„๋ฌด๊ฒƒ๋„ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@UncleFifi ๊ทธ๋Ÿฐ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ์œ ํ˜• ๊ฒ€์‚ฌ์—์„œ ๋ฐ”๋ฒจ ์œ ํ˜• ์Šคํฌ๋ฆฝํŠธ ๋ณ€ํ™˜์œผ๋กœ ์ด๋™ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๊ณ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์‹ค์ œ๋กœ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ. ์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ์— ํ•ฉ๋ฒ•์  ์ธ ํŒŒ์ผ์ด์žˆ์„ ๋•Œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š”์ด ์˜ค๋ฅ˜์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ. ์ด ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ์— ํ•ฉ๋ฒ•์  ์ธ ํŒŒ์ผ์ด์žˆ์„ ๋•Œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๋Š”์ด ์˜ค๋ฅ˜์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งž์•„์š”, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.์ด ๊ธ€์„ ์ฝ์€ ์ง€ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ์ฆ‰, ๊ทธ๋“ค์ด CRA์—์„œ --isolatedModules ๋ฅผ ์„ค์ • ํ•œ ์ด์œ ๋Š” ๋ฐ”๋ฒจ ํƒ€์ดํ”„ ์Šคํฌ๋ฆฝํŠธ์˜ ํ•œ๊ณ„๋ฅผ ๊ฐ€๊น๊ฒŒ ์—๋ฎฌ๋ ˆ์ดํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (๋ฐ”๋ฒจ๋„ ๋‹จ์ผ ํŒŒ์ผ ํŠธ๋žœ์Šค ํŒŒ์ผ์ด๊ธฐ ๋•Œ๋ฌธ์—). ๋ ˆ์ผ.

๊ทธ๋ ‡๋‹ค๋ฉด ์˜ค๋ฅ˜ Cannot compile namespaces when --isolatedModules flag is provided ์— ๋Œ€ํ•œ ํ˜„์žฌ ํ•ด๊ฒฐ์ฑ…์€ ํŒŒ์ผ ๋งจ ์œ„์— export {}; ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

์˜ˆ, ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์‹ค์ œ๋กœ TypeScript namespace ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ์•„๋งˆ๋„ ํ•ฉ๋ฒ•์  ์ธ ๋ฌธ์ œ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

ํŒŒ์ผ์ด "๋นˆ"ํŒŒ์ผ (์ฆ‰, ์ „์ฒด ํŒŒ์ผ์ด ์ฃผ์„ ์ฒ˜๋ฆฌ๋จ) ๋•Œ๋ฌธ์—์ด ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” TS๊ฐ€ ์ด๊ฒƒ์„ ํฌ์ฐฉํ•˜์—ฌ ๊ธฐ์˜์ง€๋งŒ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋Š” ๋งค์šฐ ๋ถˆํˆฌ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค (๋ฐ”๋‹๋ผ CentOS 7 ์„ค์น˜์—์„œ ์ƒ‰์ƒ์ด ๊นจ์กŒ์ง€๋งŒ ์ด๊ฒƒ์€ ์•„๋งˆ๋„ TS์™€ ์ง์ ‘ ๊ด€๋ จ์ด์—†๋Š” webpack dev ์„œ๋ฒ„ ๋•Œ๋ฌธ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค)

screen shot 2019-02-06 at 14 20 14

_ ํŽธ์ง‘ : ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ ์ตœ์ƒ์œ„ ๋‚ด๋ณด๋‚ด๊ธฐ๋กœ๋งŒ ๊ตฌ์„ฑ๋œ ํŒŒ์ผ์„ ํ™•์‹คํžˆ ์ณ๋‹ค๋ณด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ์ด ์˜ค๋ฅ˜๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ๋ณ„๋กœ ์–ด๋”˜๊ฐ€์—์„œ ๋ญ”๊ฐ€ ์ž˜๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ._

์ด ์˜ค๋ฅ˜๋Š” ์ตœ์ƒ์œ„ ์ˆ˜์ค€ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€์žˆ๋Š” ํŒŒ์ผ์—์„œ ๋ฐฉ๊ธˆ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค .

// Cannot compile namespaces:
export const foo = 'foo';

// Compiles fine
const foo = 'foo';
export { foo };

@ denis-sokolov ๋ถ„๋ช…ํ•œ ์งˆ๋ฌธ : ํ•ด๋‹น ํŒŒ์ผ์— ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ๋„ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ง ๊ทธ๋Œ€๋กœ export const ์ด๋ผ๋ฉด ๋‘ ๋ฒˆ์งธ ์ถ”์ธก์€ typescript๊ฐ€ ts-loader๋ฅผ ์‚ฌ์šฉํ•˜๋Š” webpack๊ณผ ๊ฐ™์€ ๊ฒƒ์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์œผ๋ฉฐ export ํ™•์žฅํ•˜๋Š” ์ด์ „ ํŒจ์Šค (์˜ˆ : babel-loader) ์ดํ›„์—๋งŒ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์‹ ์œผ๋กœ๋“ 

๋” ์ด์ƒ ์žฌํ˜„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๊ฒฝ๋ณด๋กœ ์ธํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค,

ํŠน์ • ํŒŒ์ผ์—์„œ ์™œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ํŒŒ์ผ์€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

screen shot 2019-02-18 at 12 49 07
screen shot 2019-02-18 at 12 48 34

CRA TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  @types ์ด์—†๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ ์˜ค๋Š” ์ƒํ™ฉ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์œ  ํ•œ ์œ ํ˜•์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด declare module 'package' ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ์ด ๋ช…๋ น๋ฌธ์„ ๋ชจ๋“ˆ ํŒŒ์ผ์— ๋„ฃ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ„์†ํ•ด์„œ types.ts ๋ฅผ ๋งŒ๋“ค์–ด declare module ๋ฌธ์„ ๊ฑฐ๊ธฐ์— ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

isolatedModules ์„ false ์žฌ์ •์˜ํ•˜๋ฉด CRA๊ฐ€ ๋ฐ”๋กœ ๋‹ค์‹œ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค.

export {} ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ types.ts ํŒŒ์ผ์— declare module ํ•˜๋ฉด ๊ธฐ๋Šฅ ๋ณด๊ฐ•์—์„œ ์ž˜๋ชป๋œ ๋ชจ๋“ˆ ์ด๋ฆ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹ . ์ด ์˜ค๋ฅ˜๋Š” ๋ชจ๋“ˆ์ด ์•„๋‹Œ ํŒŒ์ผ์— ์„ ์–ธ์„ ๋„ฃ์–ด ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,์ด ๊ฐ•์ œ isolatedModules ์„ค์ •์„ ํ†ตํ•ด CRA๋Š” ๋ชจ๋“  ํŒŒ์ผ์„ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค!

๋”ฐ๋ผ์„œ ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ˆœํ™˜ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค๋ฅธ ์˜ค๋ฅ˜์— ๋„๋‹ฌํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ถ”์ธก์— @Bnaya , ์ž‘๋™ํ•˜๋Š” ํŒŒ์ผ์€ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ฝ”๋“œ์—์„œ require()/module.exports ๋ฐ import/export ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜์„ธ์š”. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ชจ๋“  ํŒŒ์ผ์ด tsconfig include์— ํฌํ•จ๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค (๊ทธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฌธ์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@TomasHubelbauer ๋ชจ๋“ˆ ์„ ์–ธ์€ ๋ฌด์—‡๋ณด๋‹ค๋„ ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ .d.ts์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
CRA์—์„œ ์ œ๊ฑฐํ•œ ์„ค์ • ๋งŒ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•˜๊ณ  ๋‹ค์‹œ ๋ณ€๊ฒฝํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ isolatedModules์— ๋Œ€ํ•ด ๋” ์ผ๊ด€์„ฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@simonbuchan ๋‚˜๋Š” .d.ts ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ €์—๊ฒŒ๋„ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ๋‹ค์‹œ๋ณด๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ CRA๋Š” ์ €๋ฅผ ์œ„ํ•ด ๊ทธ ์„ค์ •์„ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@simonbuchan ๋‚˜๋Š” ์† ์ „์— ์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค-์•„๋ฌด ์†Œ์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค :(

@simonbuchan ํ  ์ข‹์•„์š”. .d.ts ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ์„ ์–ธํ•˜๊ณ  ์ž…๋ ฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์›๋ž˜ ํฌ๊ธฐํ•œ ์ด์œ ๋Š” ํ•ด๋‹น ๋ชจ๋“ˆ์—์„œ ์„ ์–ธํ•˜๋ ค๋Š” ์ž…๋ ฅ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์ž…๋ ฅ์„ ์ฐธ์กฐํ•ด์•ผํ•˜์ง€๋งŒ .d.ts ํŒŒ์ผ์— import ๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ž‘๋™์ด ์ค‘์ง€๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด์ง€๋งŒ ๋” ์ด์ƒ์ด ์˜ค๋ฅ˜์™€ ๊ด€๋ จ์ด์—†๋Š” TypeScript ์ง€์‹์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ typescript @ next (https://github.com/yang/sandbox-ts-namespaces-error์˜ ์ „์ฒด ์ €์žฅ์†Œ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ์žฌํ˜„ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

src / a.js : (์•Œ๋ฆผ, ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Œ)

module.exports = "hello"; // you could really put anything here, e.g. console.log('hello');

tsconfig.js :

{
  "compilerOptions": {
    "allowJs": true,
    "isolatedModules": true,
    "noEmit": true,
    "strict": true
  },
  "include": ["src"]
}

์˜ค๋ฅ˜:

$ ./node_modules/.bin/tsc
src/a.js:1:1 - error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.

1 module.exports = "hello";
  ~~~~~~


Found 1 error.

์ €๋„ ์ฒ˜์Œ์— create-react-app --typescript ํ†ตํ•ด์ด ๋ฌธ์ œ๋ฅผ ๋งŒ๋‚ฌ๋Š”๋ฐ, ์ด๋Š” setupProxy.js (๋˜๋Š” setupTests.js)๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค. CRA๋Š” ๋˜ํ•œ isolatedModules ๋ฐ allowJs ๋ฅผ true๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ตœ์‹  typescript ๋ฒ„์ „์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€๋Š” ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (3.2.x ๋˜๋Š” 3.3.x๋กœ ์—…๋ฐ์ดํŠธ ํ•œ ํ›„์— ๋งŒ โ€‹โ€‹typescript 3.1.x์—์„œ setupProxy.js์— ๋Œ€ํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

์ œ์™ธ ์„ธํŠธ์— .js ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ tsc๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์ž‘๋™ํ•˜์ง€๋งŒ ์„ฑ๊ฐ€ ์‹œ๊ฒŒ๋„ TS ์–ธ์–ด ์„œ๋น„์Šค (VS Code ๋ฐ Webstorm ๋ชจ๋‘ ์‹œ๋„)์˜ ํŽธ์ง‘๊ธฐ์—์„œ ํ•ด๋‹น ํŒŒ์ผ์˜ ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ์ œ์™ธ๋ฅผ ์กด์ค‘ํ•˜์ง€ ์•Š๋Š” TS ์–ธ์–ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ๋ณ„๋„์˜ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ์กด ๋ฌธ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.) ํŽธ์ง‘๊ธฐ์—์„œ์ด ์˜ค๋ฅ˜๋ฅผ ๊ฐ€๋ฆฌ๊ธฐ ์œ„ํ•ด .d.ts ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. * .js ํŒŒ์ผ์˜ ๊ฒฝ์šฐ.

๋˜ํ•œ .js ํŒŒ์ผ์„ ์š”๊ตฌํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ ธ ์˜ค๋ฉด ์ œ์™ธ๊ฐ€ ๋น„ํšจ์œจ์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜์–ด ํŽธ์ง‘๊ธฐ ์™ธ๋ถ€์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

allowJs (create-react-app์ด ์ œ์•ˆํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€) ๋งŒ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์›น ์ž‘์—…์ž์—๊ฒŒ์ด ์˜ค๋ฅ˜๊ฐ€ ๊ณ„์† ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ณ„ ํŒŒ์ผ ๋˜๋Š” ํด๋”๋ฅผ ์ œ์™ธํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด isolatedModules ์„ค์ •์„ ์žฌ์ •์˜ ํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๊นŒ? CRA๋Š” tsconfig.json์„ ๊ณ„์† ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@jamespfarrell ํŒŒ์ผ์— export {}; ๋„ฃ์œผ์‹ญ์‹œ์˜ค.

@Macil ๊ท€ํ•˜์˜ ์กฐ์–ธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ ธ ์˜ค๊ธฐ ์‹œ๋„ ์˜ค๋ฅ˜ : './workers/HeartBeat.worker.js'์— ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค ( 'HeartBeatWorker'๋กœ ๊ฐ€์ ธ์˜ด).

์ถ”๊ฐ€ํ•˜๋ฉด :

export default {};

๋‚˜๋Š” ์–ป๋‹ค:

์žกํžˆ์ง€ ์•Š์€ TypeError : _workers_HeartBeat_worker_js__WEBPACK_IMPORTED_MODULE_2 __. default๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋„ ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ์•„๋‹ˆ๋ผ๋ฉด์ด 'isolatedModules'๋ฅผ ์šฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ง€๊ธˆ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋Š” isolatedModules ์„ค์ •๊ณผ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. isolatedModules๋ฅผ ๋„๋”๋ผ๋„ ์—ฌ์ „ํžˆ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์ ธ ์˜ค๊ธฐ ์‹œ๋„ ์˜ค๋ฅ˜ : './workers/HeartBeat.worker.js'์— ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค ( 'HeartBeatWorker'๋กœ ๊ฐ€์ ธ์˜ด).

์ด ์˜ค๋ฅ˜๋Š” ์–ด๋””์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๊นŒ? import Foo from './workers/HeartBeat.worker.js'; ์™€ ๊ฐ™์ด ํŒŒ์ผ์ด์—†๋Š” ํŒŒ์ผ์˜ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๊ฐ€์ ธ ์˜ค๋ ค๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์œผ๋ ค๋ฉด ๊ฐ€์ ธ ์˜ค๊ธฐ ํ–‰์„ import './workers/HeartBeat.worker.js'; ๋กœ ๋ณ€๊ฒฝํ•˜์‹ญ์‹œ์˜ค.

๋‹น์‹  ๋ง์ด ๋งž์•„์š” .

_ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ._ ์ฝ˜ํ…์ธ ๊ฐ€์—†๋Š” ์ž๋ฆฌ ํ‘œ์‹œ ์ž๋กœ ๋‚จ๊ฒจ๋‘” ๋ช‡ ๊ฐœ์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ํŒŒ์ผ๋กœ ๊ฐ€์ ธ ์™”์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ์˜จ ๋นˆ styles.js ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์ถ”๊ฐ€
image

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํŠน์ • ์‹ค์ˆ˜๋ฅผํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ˆ˜๋กœ .d.ts ๋Œ€์‹  .ts ์ ‘๋ฏธ์‚ฌ๋ฅผ ๋ถ™์ธ ๋ชจ๋“ˆ ์ •์˜์— ๋Œ€ํ•ด์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์ • ํ›„ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ™์€ ์˜ค๋ฅ˜. CRA๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

CRA์—์„œ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ์—์„œ ๋ฌด์—‡์ด๋“  ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.
ะกะฝะธะผะพะบ ัะบั€ะฐะฝะฐ ะพั‚ 2019-04-22 22-24-04

๊ทธ๋ž˜์„œ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์— .js ํŒŒ์ผ์ด ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์—์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. tsconfig.json ํŒŒ์ผ์—์„œ ๋‹ค์Œ์„ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

"compilerOptions": {
    ....
  },
  "include": ["src"],

๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ „ํ™˜ํ•ด์•ผํ–ˆ๋‹ค.

"compilerOptions": {
    ....
  },
  "include": ["src/*"],

๊ทธ๊ฒŒ ๊ณ ์ณ์กŒ์ง€๋งŒ ์™œ ๊ทธ๋Ÿฐ์ง€ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š”๋ฐ ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด ์ดํ•ด๋Š” src ๋ฅผ ํฌํ•จํ•˜๋ฉด ๋ฃจํŠธ ํŒŒ์ผ๊ณผ ํ˜•์ œ ํด๋”๊ฐ€ ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@thitemple ์–ด๋”˜๊ฐ€์˜ ๊ธฐ์‚ฌ์—์„œ / * ์Šค ๋‹ˆํŽซ์„

@ vort3xxx ๋‚˜๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. @DaviSpindola์—์„œ์ด ๊ฒŒ์‹œ๋ฌผ https://github.com/microsoft/TypeScript/issues/15230#issuecomment -479730947์„ ๋ณด๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑฐ์˜€๋‹ค

@ vort3xxx ๋‚˜๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. @DaviSpindola ์˜์ด ๊ฒŒ์‹œ๋ฌผ ๋ณด๊ณ  ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฑฐ์˜€๋‹ค

๊ฐ™์€ ๋ฌธ์ œ, ๊ฐ™์€ ํ•ด๊ฒฐ์ฑ…. TS 3.5.2.

๋ฟก ๋นต๋€จ

@simonbuchan ๋‚˜๋Š” .d.ts ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ €์—๊ฒŒ๋„ ํšจ๊ณผ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ์ด์œ ๋ฅผ ๋‹ค์‹œ๋ณด๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ๋กœ CRA๋Š” ์ €๋ฅผ ์œ„ํ•ด ๊ทธ ์„ค์ •์„ ๋‹ค์‹œ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ƒˆ์Šต๋‹ˆ๊นŒ? create react ์•ฑ ๋‚ด์—์„œ .ts ๋˜๋Š” .d.ts ์„ ์–ธ ํŒŒ์ผ์„ ์ •์˜ํ•˜๋ฉด All files must be modules when the '--isolatedModules ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ œ๊ณต๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ์— ํ”Œ๋ž˜๊ทธ๋ฅผ ์„ค์ • false ๋˜๋Š” ์ œ๊ฑฐ isolatedModules ์ „์ ์œผ๋กœ์œผ๋กœ ๋‹ค์‹œ ์†์„ฑ์„ true ์‹œ์ž‘ํ•  ๋•Œํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ˜์‘ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์ถ”๊ฐ€ export {} ์˜ค๋ฅ˜์˜ ์„ ์–ธ ํŒŒ์ผ ๊ฒฐ๊ณผ์˜ ๋งจ ์•„๋ž˜์— : Invalid module name in augmentation. Module '...' resolves to an untyped module at '...' .

๋ˆ„๊ตฐ๊ฐ€ ๋„์™€์ฃผ์„ธ์š”. Create React App ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ์ž ์ •์˜ ์„ ์–ธ ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๊นŒ?

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. create react ์•ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์†Œ์Šค ํด๋”์˜ react-app-env.d.ts ํŒŒ์ผ์— ์„ ์–ธ ์œ ํ˜•์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰