Typescript: ๋ชจ๋“ˆ์—์„œ UMD ์ „์—ญ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ—ˆ์šฉ ๊ณ ๋ ค

์— ๋งŒ๋“  2016๋…„ 08์›” 05์ผ  ยท  73์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

# 7125์˜ ํ”ผ๋“œ๋ฐฑ์€ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ๊ธ€๋กœ๋ฒŒ ๋ฐ ๊ฐ€์ ธ์˜จ UMD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ˜ผํ•ฉํ•˜๊ณ  ์ผ์น˜์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๊ฐ„์ฃผํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์„ธ ๊ฐ€์ง€ ๊ทธ๋Ÿด๋“ฏํ•œ ์˜ต์…˜ :

  1. ์˜ค๋Š˜ ์šฐ๋ฆฌ๊ฐ€ํ•˜๋Š” ์ผ์„ํ•ด๋ผ-์ข‹์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์˜๋‹ค
  2. ์ผ๋ถ€ ๊ตฌ๋ฌธ ๋˜๋Š” ๊ตฌ์„ฑ์—์„œ "์ด UMD ์ „์—ญ์€ ์‹ค์ œ๋กœ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ํ‘œ์‹œํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์†Œ ๋ณต์žกํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปจํ…์ŠคํŠธ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  UMD ์ „์—ญ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ—ˆ์šฉ-์‚ฌ๋žŒ๋“ค์ด ํŒŒ์ผ์—์„œ UMD ์ „์—ญ์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์„ ์žŠ์€ ์˜ค๋ฅ˜๋ฅผ ๋†“์นฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‹ค์†Œ ๋“œ๋ฌผ์ง€๋งŒ ๋†“์น˜๋Š” ๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์ผ์ž…๋‹ˆ๋‹ค

์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ์•„๋งˆ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ๊ฐ€์ ธ์˜จ UMD ๋ชจ๋“ˆ์„ "๊ธ€๋กœ๋ฒŒ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ"์œผ๋กœ ํ”Œ๋ž˜๊ทธ ์ง€์ •-UMD ๋ชจ๋“ˆ์€ ๋ชจ๋“ˆ ํ™•์žฅ ์ค‘์— ์„ ์–ธ ํŒŒ์ผ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ ํŒŒ์ผ๊ณผ ์„ ์–ธ ํŒŒ์ผ์—์„œ ๊ฐ€์ ธ ์˜ค๊ธฐ์˜ ๋™์ž‘์ด ๋‹ค๋ฅธ ๊ฒƒ์€ ์ด์ƒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ๋‹จ์ˆœํ•จ์„ ์œ„ํ•ด ์˜ต์…˜ 3์„ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋…ผ๋ฆฌ์  ์œ„์น˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ข‹์€ ๊ตฌ๋ฌธ์ด๋‚˜ ๊ตฌ์„ฑ์ด ์žˆ์œผ๋ฉด ์˜ต์…˜ 2๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. TSLint ๊ทœ์น™์—์„œ UMD ์ „์—ญ ์‚ฌ์šฉ์„ ๊ฐ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ˆ„๊ตฐ๊ฐ€์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ์˜ต์…˜ 3์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด "๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ž์ฃผ ๋ฒ”ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ง€๋ฉด ํ—ˆ์šฉ๋˜๋Š” UMD ์ „์—ญ์„ ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” tsconfig ์˜ต์…˜ globals: [] ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

Add a Flag Committed Suggestion good first issue help wanted

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

์ด๊ฒƒ์— +1. SystemJS์™€ ํ•จ๊ป˜ React๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ–ˆ๋Š”๋ฐ React๊ฐ€ ์ž˜ ๋ฒˆ๋“ค๋ง๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— CDN์—์„œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ ์ง์ ‘๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— React / ReactDOM ๊ฐ์ฒด๋ฅผ ์ „์—ญ ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ๋กœ๋“œ์‹œ ์‹คํ–‰๋˜๋Š” ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฒˆ๋“ค (๋กค์—…)๋ฉ๋‹ˆ๋‹ค. import from react / react-dom์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ๋กœ๋”๊ฐ€ "์ง„์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ „์—ญ์ž…๋‹ˆ๋‹ค"(https : /์— ์ œ๊ณต๋œ ์˜ˆ์ œ WebPack ๊ตฌ์„ฑ๊ณผ ์œ ์‚ฌ)๋ผ๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๊ฑฐ์ง“๋ง์ž…๋‹ˆ๋‹ค. /www.typescriptlang.org/docs/handbook/react-&-webpack.html). ๋‚ด ๋ชจ๋“ˆ์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ๊ณ  ์ •ํ™•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋‹จ๊ณ„๋Š” ์ง๊ด€์  ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

  1. npm install --save-dev @types/react @types/react-dom
  2. ๋‚ด tsconfig.json์—์„œ : "jsx": "react", "types": ["react", "react-dom"]
  3. ๋‚ด ๋ชจ๋“ˆ : export function MyComponent() { return <div>{"Hello, world"}</div>; }
  4. ์œ ์‚ฌํ•˜๊ฒŒ : ReactDOM.render(...)

๊ทธ๋Ÿฌ๋‚˜ ์ด๋กœ ์ธํ•ด React refers to a UMD global, but the current file is a module. Consider adding an import instead ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ์ฝ”๋“œ์—์„œ ๋ชจ๋“ˆ ์ธ ์ฒ™ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๋กœ๋” / ๋ฒˆ ๋“ค๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋˜๋Š” ์•„๋ž˜์— ํฌํ•จ ๋œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ˆ์ƒ ํ•œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‚ด ๋ชจ๋“ˆ์€ React & ReactDOM์„ ์˜ค๋ฅ˜์—†์ด ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์†Œ ์ถ”์•…ํ•˜๊ฑฐ๋‚˜ ํ•ด์ปค์ž…๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋†“์ณค๋‹ค) :

import * as ReactObj from "react";
import * as ReactDOMObj from "react-dom";

declare global {
    var React: typeof ReactObj;
    var ReactDOM: typeof ReactDOMObj;
}

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

์ปจํ…์ŠคํŠธ์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  UMD ์ „์—ญ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋Œ€์‹  UMD ๋ชจ๋“ˆ์ด ///<reference types=<>> ๊ตฌ๋ฌธ์„ ํ†ตํ•ด ๋ช…์‹œ ์ ์œผ๋กœ "์ฐธ์กฐ"(๊ฐ€์ ธ ์˜ค๊ธฐ๋˜์ง€ ์•Š์Œ) ๋œ ๊ฒฝ์šฐ UMD ์ „์—ญ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๋งŒ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๋‹จํ•˜์ง€ ์•Š์„๊นŒ์š”? , ๋˜๋Š” tsconfig.json์˜ types ๊ตฌ์„ฑ์„ ํ†ตํ•ด?

์ฆ‰, ๋ชจ๋“ˆ ๋‚ด์—์„œ ///<reference types=<>> ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

/// <reference type="x" /> ๊ฐ€ x ๊ฐ€ _everywhere_ ์ „์—ญ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ๋‹ค๋ฉด, ์–ด๋”˜๊ฐ€์—์žˆ๋Š” ์ผ๋ถ€ .d.ts ํŒŒ์ผ์ด ์‹ค์ œ๋กœ ์ „์—ญ์ด ์•„๋‹Œ ๊ฒƒ์„ ์ž˜๋ชป ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค ( DefinitelyTyped์˜ 2.0 ๋ธŒ๋žœ์น˜๋ฅผ ๊ด€๋ฆฌํ•ด ์™”๊ณ  ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์˜ค๋ฅ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ฐ˜๋Œ€๋กœ _ ํ•ด๋‹น ํŒŒ์ผ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ฐธ์กฐ ์ง€์‹œ๋ฌธ์„ ๋ชจ๋“  ๊ณณ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ง€์‹œ๋ฌธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉฑ๋“ฑ ์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ํŠน์ • ๋™์ž‘์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐธ์กฐ. ๊ธ€์Ž„, ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์•„๋งˆ๋„ ํ˜„์žฌ ํ–‰๋™์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ ์˜ค๋Š”์ชฝ์œผ๋กœ ์™„์ „ํžˆ ์ „ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ด๊ฒƒ์ด ๋‚˜ ์™ธ์— ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์„ ๋ณด๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ด๋ก ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด์ด ๋ฌธ์ œ์— ๋ถ€๋”ชํžˆ๋ฉด ๋” ์ž์„ธํžˆ ์กฐ์‚ฌ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •ํ™•ํžˆ ์–ด๋–ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์˜๊ฒฌ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

๋‚˜๋Š” ์ž์ฒด ํƒ€์ดํ•‘๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜์ง€ ์•Š๋Š” lodash๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์‰ฌ์šด ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋กœ์ปฌ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๋ฐ ํด๋” ์ƒ๋Œ€ ( './foo'๋ฐ 'N / bar')๊ฐ€์žˆ๋Š” import ๋ฌธ ์กฐํ•ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@types/lodash/index.d.ts ์„ node_modules/lodash/ ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•˜๋ฉด ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ///<amd-dependency path='../lodash' name="_"> ( import ๋ฌธ ์—†์Œ)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ฝค๋ณด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด @ types / lodash ์ •์˜๊ฐ€ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด '์ „์—ญ ์ ์œผ๋กœ'ํ‘œ์‹œ๋˜๊ณ  ๋‚ด ๋ณด๋‚ธ JS์— ์˜ฌ๋ฐ”๋ฅธ ์ƒ๋Œ€ ๊ฒฝ๋กœ ( ../lodash )๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ์ถฉ๋ถ„ํžˆ ๊ฐ€๊นŒ์šด ์‹œ๋‚˜๋ฆฌ์˜ค ์˜€์œผ๋ฉด ์ข‹๊ฒ ์–ด์š”.

๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ

๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์—์„œ ์ƒ๋Œ€ ๊ฒฝ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์‰ฌ์šด ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ณผ

@types/lodash/index.d.ts ์„ node_modules/lodash/ ์ˆ˜๋™์œผ๋กœ ๋ณต์‚ฌํ•˜๋ฉด ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋””? ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€๋ฐ ๊ทธ ๋ชฉ์ ์€ ๋ฌด์—‡์ด๋ฉฐ ์™œ ๋„์›€์ด๋ฉ๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„,

ํ˜„์žฌ @types/bluebird ์„ ์–ธ ๋ฌธ์ œ ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š” ์ค‘์ž…๋‹ˆ๋‹ค (์ฝ๋Š” ๋ฐ ์‹œ๊ฐ„์„ ์†Œ๋น„ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค). .d.ts์— export as namespace Promise; ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์ง€ ๋งŒ์ด github ๋ฌธ์ œ์—์„œ ์„ค๋ช…ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์š”์ปจ๋Œ€, ๋‹ค์Œ ์ž‘์—…์„ ์›ํ•ฉ๋‹ˆ๋‹ค.

  1. git clone -b vanilla-es5-umd-restriction-problem https://github.com/d-ph/typescript-bluebird-as-global-promise.git
  2. cd typescript-bluebird-as-global-promise
  3. npm install
  4. export = Bluebird; ์ค„ ์œ„์— export as namespace Promise; node_modules/@types/bluebird/index.d.ts ์„ ์ถ”๊ฐ€ํ•˜์—ฌ export = Bluebird; ํ•ฉ๋‹ˆ๋‹ค.
  5. npm run tsc

ํ˜„์žฌ ๊ฒฐ๊ณผ :
๋ช‡ ๊ฐ€์ง€ 'Promise' refers to a UMD global, but the current file is a module. Consider adding an import instead. ์˜ค๋ฅ˜.

์˜ˆ์ƒ ๊ฒฐ๊ณผ:
์ปดํŒŒ์ผ์ด ์„ฑ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฐœ๋ฐœ์ž ์ฝ”๋“œ์™€ ํƒ€์‚ฌ ์ฝ”๋“œ (์ด ๊ฒฝ์šฐ RxJS) ๋ชจ๋‘์—์„œ Promise ์‚ฌ์šฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠนํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ›„์ž๋Š” Promise ๊ฐ€ ์ „์—ญ (JS ํ‘œ์ค€์— ์˜ํ•ด ์ œ๊ณต๋จ)์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฏ€๋กœ import Promise from std; // (not that "std" is a thing) ์‚ฌ์šฉ์œผ๋กœ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

UMD ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ ์˜ค๊ธฐ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“ˆ๊ณผ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ง ๊ณ ๋ง™๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌ.

----------------------------- ์—…๋ฐ์ดํŠธ

์ €๋Š”์ด ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค (์ฆ‰, Promise ๋ฐ PromiseConstructor ์ธํ„ฐํŽ˜์ด์Šค ํ™•๋Œ€).

"globals": [] tsconfig ์˜ต์…˜์€ ๋ชจ๋“  ๊ณณ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋„๋กํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. UMD ์„ ์–ธ์ด ํ‘œ์ค€์ด๋˜๋ฉด์„œ ์‹ค์ˆ˜๋กœ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์„ ์žŠ์–ด ๋ฒ„๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋™์ž‘์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์˜ค๋ฅ˜ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

์ผํ™”๋กœ ํฌ์ธํŠธ ๋ฆด๋ฆฌ์Šค์—์„œ ๊ธ€๋กœ๋ฒŒ window.moment ๋ณ€์ˆ˜๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์„ ๋•Œ๋ฅผ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๋ชจ๋“  ๊ณณ์—์„œ ์‹ ์ค‘ํ•˜๊ฒŒ ์ˆ˜์ž…ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์•ฝ 5 ๊ณณ์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  UMD ํŒจํ‚ค์ง€๋Š” ๋Ÿฐํƒ€์ž„์— ์ „์—ญ ๋ฒ”์œ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๊ฒŒ๋˜๋Š”์‹œ๊ธฐ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด๋กœ๋“œ๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด๊ฒƒ์— +1. SystemJS์™€ ํ•จ๊ป˜ React๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ–ˆ๋Š”๋ฐ React๊ฐ€ ์ž˜ ๋ฒˆ๋“ค๋ง๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— CDN์—์„œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋กœ ์ง์ ‘๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— React / ReactDOM ๊ฐ์ฒด๋ฅผ ์ „์—ญ ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ฒ” ์‚ฌ๋ก€๋กœ ์ฝ”๋“œ๋ฅผ ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ๋กœ๋“œ์‹œ ์‹คํ–‰๋˜๋Š” ํ•˜๋‚˜์˜ ๋Ÿฐํƒ€์ž„ ์Šคํฌ๋ฆฝํŠธ๋กœ ๋ฒˆ๋“ค (๋กค์—…)๋ฉ๋‹ˆ๋‹ค. import from react / react-dom์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ๋กœ๋”๊ฐ€ "์ง„์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋“ค์€ ์ „์—ญ์ž…๋‹ˆ๋‹ค"(https : /์— ์ œ๊ณต๋œ ์˜ˆ์ œ WebPack ๊ตฌ์„ฑ๊ณผ ์œ ์‚ฌ)๋ผ๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๊ฑฐ์ง“๋ง์ž…๋‹ˆ๋‹ค. /www.typescriptlang.org/docs/handbook/react-&-webpack.html). ๋‚ด ๋ชจ๋“ˆ์—์„œ ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ๊ณ  ์ •ํ™•ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‹œ๋„ํ•œ ๋‹จ๊ณ„๋Š” ์ง๊ด€์  ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

  1. npm install --save-dev @types/react @types/react-dom
  2. ๋‚ด tsconfig.json์—์„œ : "jsx": "react", "types": ["react", "react-dom"]
  3. ๋‚ด ๋ชจ๋“ˆ : export function MyComponent() { return <div>{"Hello, world"}</div>; }
  4. ์œ ์‚ฌํ•˜๊ฒŒ : ReactDOM.render(...)

๊ทธ๋Ÿฌ๋‚˜ ์ด๋กœ ์ธํ•ด React refers to a UMD global, but the current file is a module. Consider adding an import instead ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ์ฝ”๋“œ์—์„œ ๋ชจ๋“ˆ ์ธ ์ฒ™ํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๋กœ๋” / ๋ฒˆ ๋“ค๋Ÿฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๋‹จ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋˜๋Š” ์•„๋ž˜์— ํฌํ•จ ๋œ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์˜ˆ์ƒ ํ•œ๋Œ€๋กœ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ๋‚ด ๋ชจ๋“ˆ์€ React & ReactDOM์„ ์˜ค๋ฅ˜์—†์ด ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค์†Œ ์ถ”์•…ํ•˜๊ฑฐ๋‚˜ ํ•ด์ปค์ž…๋‹ˆ๋‹ค. ๋” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋†“์ณค๋‹ค) :

import * as ReactObj from "react";
import * as ReactDOMObj from "react-dom";

declare global {
    var React: typeof ReactObj;
    var ReactDOM: typeof ReactDOMObj;
}

๋˜ํ•œ ์˜ต์…˜ 3๊ณผ ์ „์—ญ : [] ๋ฐฑ์—…์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์‹ ๊ทœ ๋ฐ ๊ธฐ์กด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋งค์šฐ ์ง๊ด€์ ์œผ๋กœ ๋ณด์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์ด ํ•„์š”๋กœํ•˜๋Š” ์ •ํ™•ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐ€ ๋” ๋‚˜์€์ง€ ์•„๋‹Œ์ง€๋Š” ๋งํ•  ์ˆ˜ ์—†์ง€๋งŒ ๊ตฌ์„ฑ์ด ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ง๊ด€์  ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์„ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋””๋กœ ๊ฐ€์•ผํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ์ •๋ง๋กœ ๊นƒ๋ฐœ ๋’ค์— ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—„์ฒญ๋‚œ ๋ฆฌํŒฉํ† ๋ง ์œ„ํ—˜์ž…๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ true๋กœ ์ง€์ •๋œ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์›๋ž˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ณ„์† ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด UMD ์„ ์–ธ์˜ ์ฃผ์š” ์ด์ ์„ ์žƒ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

React๋Š” ์ž˜ ๋ฌถ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@billti ์ž์„ธํžˆ

import from react / react-dom์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ๋กœ๋”๊ฐ€ "์ง„์งœ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฑด ๊ธ€๋กœ๋ฒŒ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๊ณ ํ†ต์Šค๋Ÿฝ๊ณ  ๊ฑฐ์ง“๋ง์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์“ด ์œ ์ผํ•œ ์ด์œ ๋Š” externals ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒˆ๋“ค ์‹œ๊ฐ„์ด ์ค„์–ด๋“ค ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ž„ํฌํŠธํ•˜์ง€ ์•Š๊ณ  ์ „์—ญ React ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚˜์ค‘์— ๋ชจ๋“ˆ๋กœ ์‰ฝ๊ฒŒ ์ „ํ™˜ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ž„ํฌํŠธ๋Š” ์ฃผ์–ด์ง„ ๋กœ๋” ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ฒˆ๋“ค๋ง์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ด€์ฐฐ ๋œ ํฌ๊ธฐ์— ๋Œ€ํ•œ ํ•œ ๊ฐ€์ง€ ์˜ˆ๋Š”์ด ๋ฌธ์ œ (https://github.com/rollup/rollup/issues/855)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ๋‚ด ์„ค์ •์—์„œ ํšจ๊ณผ์ ์œผ๋กœ (๋กค์—…์„ ์‚ฌ์šฉํ•˜์—ฌ) React๋ฅผ ๋ฒˆ๋“ค๋งํ•˜๋Š” ์ตœ์†Œ ํฌ๊ธฐ ์ฆ๊ฐ€๋ฅผ ๋ณด์•˜์œผ๋ฏ€๋กœ CDN์—์„œ ์ œ๊ณตํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

a) ๋‚ด ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๋” ์ ์€ ์š”์ฒญ (๋ฐ ๋Œ€์—ญํญ).
b) ๋นŒ๋“œ ์ฒด์ธ์— ๋ฒˆ๋“ค๋งํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ค„์–ด ๋“ญ๋‹ˆ๋‹ค.
c) ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‹œ ํ•  ๋•Œ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ์— ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ํ•  ์ฝ”๋“œ๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค (๋‚ด ์ฝ”๋“œ ๋งŒ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ๋ฒˆ๋“ค์— ์žˆ๊ณ  React๋Š” ์ˆ˜์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ํด๋ผ์ด์–ธํŠธ ์บ์‹œ์— ๋‚จ์•„ ์žˆ์œผ๋ฏ€๋กœ 304s๋ฅผ ์–ป์Œ).

์‚ฌ์ดํŠธ๋ฅผ๋กœ๋“œ ํ•  ๋•Œ Chrome ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์‚ดํŽด๋ณด๋ฉด GZipped HTTP ์—ฐ๊ฒฐ์—์„œ React ๋ฐ React-dom (์ตœ์†Œํ™” ๋œ ๋ฒ„์ „)์€ 47kb์˜ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์œผ๋กœ ์‚ฌ์ดํŠธ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์ด๋ฏธ์ง€๋ณด๋‹ค ์ ์œผ๋ฏ€๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๋ง ํฐ ์ด๋“ (์˜ˆ : 50 % ๊ฐ์†Œ)์ด ์—†๋‹ค๋ฉด ์–ด์จŒ๋“  ๊ทธ ์ •๋„๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ถ€๋ก์œผ๋กœ : ๋˜ํ•œ์ด ์˜ต์…˜์ด ์—†์œผ๋ฉด TypeScript ์ปดํŒŒ์ผ๋Ÿฌ ์ž์ฒด๊ฐ€ "์ด ๋ชจ๋“ˆ์€ ์‹ค์ œ๋กœ ์ „์—ญ ์ "์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ตฌ์„ฑ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ œ๊ฑฐํ•˜๋Š” ๋ฒˆ ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„์— ํ•ด๊ฒฐ๋˜์ง€ ์•Š๋Š” ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ฐ€์ ธ ์˜ค๊ธฐ (๋˜๋Š” ํ•„์š” ๋˜๋Š” ์ •์˜)๋ฅผ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค.

@billti SystemJS๋Š”์ด ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ๋กœ์ปฌ๋กœ ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ํ”„๋กœ๋•์…˜์—์„œ CDN์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์‚ฌ์ด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ์‹ค์ œ๋กœ ํ•œ ๋ฒˆ ๊ฐ€์ ธ ์™€์„œ ์ฒ˜์Œ ํ•„์š”ํ•  ๋•Œ ์ฐฝ ๊ฐœ์ฒด์— ์—ฐ๊ฒฐ๋˜๋Š” ์ „์—ญ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋„๋ก ์ง€์ •ํ•˜๋Š” ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ๋Š” CDN์—์„œ ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฐ˜์‘์œผ๋กœ ์ด๊ฒƒ์„ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๊ฐ๋„ 1.x๋กœํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @aluanhaddad . ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ... ์ €๋Š” ์‹ค์ œ๋กœ ์ €๋ฅผ์ด ์žฅ์• ๋ฌผ๋กœ ์ด๋ˆ ๋น„์Šทํ•œ ์ž‘์—…์„ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์•Œ์•„๋‚ผ ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋Š˜ ์•„์นจ SystemJS ์ €์žฅ์†Œ์— ์งˆ๋ฌธ์„ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/systemjs/systemjs/issues/1510 ๋‹ฌ์„ฑ ๋ฐฉ๋ฒ•์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)

์ฐธ๊ณ  : ๋‚ด ๋‹ค๋ฅธ ์˜๊ฒฌ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹TypeScript ์ž์ฒด์— ์˜ํ•œ ๋ฐฉ์ถœ์€ ์ฝ”๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ „์—ญ์œผ๋กœ ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด SystemJS / WebPack / Rollup ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž‘์—… ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฝค ์˜ค๋žซ๋™์•ˆ ํ•ด๋ณธ ์ ์ด์—†๊ณ  ๋‹น์‹œ์— ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์†Œ์Šค ์ฝ”๋“œ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์ง€๋งŒ 100 % ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์žˆ์„ ์ˆ˜์žˆ๋‹ค.

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

์ฐธ๊ณ  : SystemJS API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SystemJS์—์„œ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  https://github.com/systemjs/systemjs/issues/1510์— ์†”๋ฃจ์…˜์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ.

๋‘ ๋ฒˆ์งธ ์š”์  : ์˜ˆ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋กœ๋”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๋‚ด ์š”์ ์€ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์„ ์ „์—ญ์— ๋งคํ•‘ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ TypeScript๋Š” ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋Ÿฐํƒ€์ž„์— ์ฝ”๋“œ๋ฅผ ์œ ํšจํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋กœ๋”๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ ์›๋ž˜ ๋ฌธ์ œ์˜ catch-22์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ „์—ญ (์ด ๊ฒฝ์šฐ React)์„ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์„ ์–ธ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ชจ๋“ˆ ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค (์•„๋‹ˆ์š”). .

๋‚ด ๋‹ค๋ฅธ ์˜๊ฒฌ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹TypeScript ์ž์ฒด์— ์˜ํ•œ ๋ฐฉ์ถœ์€ ์ฝ”๋“œ ์‹คํ–‰์„ ์œ„ํ•ด ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ „์—ญ์— ๋งคํ•‘ํ•˜๊ธฐ ์œ„ํ•ด SystemJS / WebPack / Rollup ๋“ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@billti ์ดํ•ด๊ฐ€ ์•ˆ ๋ผ์š”. ๋ชจ๋“ˆ์˜ ๊ธ€๋กœ๋ฒŒ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์œ ์ผํ•œ ์˜ต์…˜์ด์ง€๋งŒ TypeScript๊ฐ€์ด๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ „์—ญ ๋ฐ ๋ชจ๋“ˆ ๋ชจ๋‘ ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค ๋งŒ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

@DanielRosenwasser ์ €๋Š” React๊ฐ€ ์‹ค์ œ๋กœ๋กœ๋“œ๋˜๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์— ์ „์—ญ ๊ฐ์ฒด์˜ ๊ตฌ์„ฑ์›์—์„œ์™€ ๊ฐ™์ด ๋Ÿฐํƒ€์ž„์— ์ „์—ญ์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@billti ํ›Œ๋ฅญ ํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์š”์  : ๋ฌด์Šจ ๋œป์ธ์ง€ ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋Š๋‚Œ์€ ๋ธŒ๋ผ์šฐ์ € ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ RequireJS์™€ ๊ฐ™์€ ๋กœ๋” ๋˜๋Š” Webpack๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ €๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชจ๋“ˆ์„ ์ง€์›ํ•˜์ง€ ์•Š์ง€๋งŒ ์•„๋ฌด๋Ÿฐ ์ฐจ์ด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๋‚˜๋Š” Chakra๊ฐ€ ๊นƒ๋ฐœ ๋’ค์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ์ถ”๊ฐ€ ๋„๊ตฌ ์—†์ด๋Š” ์ฝ”๋“œ๋ฅผ ์ „ํ˜€ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. define , require ๋˜๋Š” System.register ๋ฅผ ํฌํ•จํ•˜๋Š” ์ถœ๋ ฅ์ด ๋‚ด ๋ณด๋‚ธ _JavaScript_ ์ฝ”๋“œ๊ฐ€ ์ด์‹ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” "๋ชจ๋“ˆ๊ณผ ๋ชจ๋“ˆ์ด ์•„๋‹Œ"๊ตฌ๋ณ„์˜ ์ค‘์š”์„ฑ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ "๋ชจ๋“ˆ"์„ ํ•œ ๋ฒˆ ์ด์ƒ ์ฐธ์กฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

_shims.d.ts_

import __React from 'react';

declare global {
  const React: typeof __React;
}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ React๊ฐ€ ๊ธ€๋กœ๋ฒŒํ™”๋˜์—ˆ์œผ๋ฉฐ ๋” ์ด์ƒ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€์—†๋Š” ์ด์œ ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ shims.d.ts, ๋ช‡ ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์˜ฌ๋ฆฌ๋ฉด ๋‚ด๊ฐ€ ์ง€๊ธˆ ํ•œ ์ผ์ž„์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์œ„๋Œ€ํ•œ ๋งˆ์Œ์€ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ;-)

์ด์ œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ์ž‘๋™ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์š”์ ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” TypeScript๋ฅผ ์ฑ„ํƒํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ ˆ๋ง์˜ ๊ตฌ๋ฉ์ด๊ฐ€ ์•„๋‹Œ ์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด์— ๋น ์ง€๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์—ผ๋‘์—๋‘๊ณ  TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ข…์ข… ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ํ•ฉ๋‹ˆ๋‹ค. a) ์œ ํšจํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๊นŒ, b) ๊ณ ๊ฐ์ด์ด๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์ˆ˜ํ–‰ ํ•  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋Œ€๋žต ์ž…๋ ฅํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์— ๋Œ€๋žต์ ์œผ๋กœ Babel์—์„œ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” (๋น„ TypeScript) ๋ฒ„์ „์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ๊ฐ€ ์œ ํšจํ•˜๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ํƒ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. React ๋ฌธ์„œ์˜ ์„ค์น˜ ํŽ˜์ด์ง€์— CDN์˜ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋‚˜์™€

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

์†”๋ฃจ์…˜์— ๊ด€ํ•ด์„œ๋Š” ... ์—ฌ๊ธฐ์—์„œ ๊ทธ๋ƒฅ ๋ฑ‰์–ด ๋‚ด์ง€ ๋งŒ ์•„๋งˆ๋„ ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” API๋ฅผ ์ด๋ฏธ ํšจ๊ณผ์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” "lib"์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ „์—ญ ์ ์œผ๋กœ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋„๋ก @types/name ํ˜•์‹ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ์–ด์ฉŒ๋ฉด ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

์šฐ๋ฆฌ๋Š” TypeScript๋ฅผ ์ฑ„ํƒํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์ ˆ๋ง์˜ ๊ตฌ๋ฉ์ด๊ฐ€ ์•„๋‹Œ ์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด์— ๋น ์ง€๋„๋ก ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ์„ฑ๊ณต์˜ ๊ตฌ๋ฉ์ด์— ์‚ฌ์šฉ์ž๋ฅผ์ง€๋„ํ•˜๋ ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ์กฐ๊ฑด๋ถ€๋กœ ์ „์—ญ์„ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ˆ˜๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์•ˆ๋‚ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋˜๋Š” ๋ณด๊ฐ• ๋œ export as namespace foo ๊ตฌ์„ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์•„๋ฌด ๊ฒƒ๋„ํ•˜์ง€ ์•Š๊ณ  ๊ณ„์†ํ•ด์„œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ทœ์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ œ ์ƒ๊ฐ์—๋Š” ๋‹ค์†Œ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  3. ์‚ฌ๋žŒ๋“ค์ด ์–ด๋””์—์„œ๋‚˜ UMD๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ—ˆ์šฉํ•˜์‹ญ์‹œ์˜ค. ์†”์งํžˆ์ด ์•„์ด๋””์–ด์— ๋Œ€ํ•ด์„œ๋Š” ๊ทธ๋ ‡๊ฒŒ ํฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@billti

๋‹ค์‹œ shims.d.ts, ๋ช‡ ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์˜ฌ๋ฆฌ๋ฉด ๋‚ด๊ฐ€ ์ง€๊ธˆ ํ•œ ์ผ์ž„์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์œ„๋Œ€ํ•œ ๋งˆ์Œ์€ ๋น„์Šทํ•˜๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค) ;-)

๋ฏธ์•ˆ ํ•ด์š”, ๋„ˆ๋ฌด ์ข‹์•˜์–ด์š”;)

TypeScript๊ฐ€ ํŒจํ„ด์„ ์ง€์›ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒจํ„ด์ด "๋ชจ๋ฒ” ์‚ฌ๋ก€"๋˜๋Š” "ํ‘œ์ค€"์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” TypeScript๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๊ทœ๋ฒ” ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๊ทธ๊ฒƒ์ด ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์ž์ฒด์ ์œผ๋กœ ์ „์—ญ์œผ๋กœ๋กœ๋“œ ํ•œ ๋‹ค์Œ ES ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ๋ชจ ๋ฐ ์ž์Šต์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•ด์„œ ๊ทธ๋“ค์ด ์œ„๋Œ€ํ•œ ์‹œ๋ฏผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋˜ ๋‹ค๋ฅธ ๋…ผ์˜์ž…๋‹ˆ๋‹ค.

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

์‚ฌ๋žŒ๋“ค์ด ์ ์–ด๋„ .ts ํŒŒ์ผ์—์„œ TypeScript๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ฐ•๋ ฅํ•œ ์ •์  ์ฝ”๋“œ ๋ถ„์„์˜ ์ด์ ์„ ์–ป๊ณ  ์‹ถ์–ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Babel์€ React๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ES ๋ชจ๋“ˆ์ด ์ •์  ๋ถ„์„์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜๋„์ ์œผ๋กœ ์ง€์ • ๋˜์—ˆ๋”๋ผ๋„ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.

๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ ํ‘œ์‹œ๋˜๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค foo ๊ตฌ์„ฑ์œผ๋กœ ์ฆ๊ฐ• ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ• ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๋˜ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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

์ฝ”๋“œ๋ฒ ์ด์Šค์— ๋ณต์‚ฌ ํ•œ emojione ํ”„๋กœ์ ํŠธ์˜ .js ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— DefinitelyTyped์— ์œ ํ˜• ์„ ์–ธ์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/DefinitelyTyped/DefinitelyTyped/pull/13293 ์ด์ œ ๋‹จ์ˆœํžˆ ์œ ํ˜•์„๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ TypeScript๋Š” ๋‚ด๊ฐ€ ์ „์—ญ์— ์•ก์„ธ์Šคํ•˜๋„๋ก ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ npm ๋ชจ๋“ˆ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” npm ๋ชจ๋“ˆ์ด ์—ฌ๋Ÿฌ ๋ฉ”๊ฐ€ ๋ฐ”์ดํŠธ์˜ ์Šคํ”„๋ผ์ดํŠธ์™€ PNG๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. 200KiB ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋งŒ ์žˆ์œผ๋ฉด๋ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ์„ ์–ธ ํฌํ•จ.

AngularJS์—์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ declare var angular: ng.IAngularStatic ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@dbrgn ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ์‹ค์ œ๋กœ ์ „์—ญ์ด๋ฉด ์œ ํ˜• ์ •์˜๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ „์—ญ์„ ์„ ์–ธํ•˜์ง€๋„ ์•Š๊ณ  UMD ์Šคํƒ€์ผ ์„ ์–ธ๋„ ์•„๋‹™๋‹ˆ๋‹ค (์ด๊ฒƒ์€ UMD ์Šคํƒ€์ผ ์„ ์–ธ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค). ์‹ค์ œ๋กœ ์ˆœ์ˆ˜ํ•œ ES ๋ชจ๋“ˆ ๋งŒ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์ด ์ „์—ญ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ๋‚ด ๋ณด๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“ˆ์ด๋ฉ๋‹ˆ๋‹ค.

AngularJS์—์„œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ var angular : ng.IAngularStatic์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋””์ž์ธ ํšŒ์˜์—์„œ ๋…ผ์˜ํ•œ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ UMD๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ํ˜„์žฌ ์ œํ•œ์„ ์ ์šฉํ•˜๋Š” ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œํ•œ์€ UMD ์ „์—ญ์—์„œ ์œ ํ˜•์— ์•ก์„ธ์Šคํ•˜๋Š” ์ž‘์—…์—๋„ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ƒ๊ฐํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ƒˆ๋กœ์šด ์„ ์–ธ ์ข…๋ฅ˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”Œ๋ž˜๊ทธ๋Š” ์„ ์–ธ ํŒŒ์ผ ์ž‘์„ฑ์ž๊ฐ€ ํ•œ ๋ฒˆ๋งŒ ์ž‘์„ฑํ•˜๋ฉด๋˜๋Š” ์ƒˆ ๊ตฌ๋ฌธ๋ณด๋‹ค ๊ฒ€์ƒ‰ ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

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

UGH.

์ž๋ฐ”๋ฅผ ๋น„์›ƒ๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ง€๋งŒ ๊ธฐ๋ณธ ์ž๋ฐ” ๋ชจ๋“ˆ์€ ์ ์–ด๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•ญ์•„๋ฆฌ ์ž‘๋™

14 ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์ž„์‹œ ๋ชจ๋“ˆ ํ‘œ์ค€์— ๋งž์ถœ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ๊ทธ๋‚ ์˜ ๋กค์—… / ๋ฒˆ๋“ค๋ง ๋„๊ตฌ๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์†Œ์Šค ํŒŒ์ผ์—์„œ js ๋ชจ๋“ˆ์„ ์‹œ๋„ํ•˜๊ณ  ์ปดํŒŒ์ผ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋ชจ๋“ˆ ํ˜•์‹๋„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. Typescript ๊ฐ€์ ธ ์˜ค๊ธฐ / ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฌธ ๋ฐ ํƒ€์‚ฌ d.ts ํŒŒ์ผ๊ณผ ์ž˜ ์–ด์šธ๋ฆฌ๋ฏ€๋กœ TSC๋Š” ์‹ค์ œ๋กœ "๋‹จ์ง€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ „ ์„ธ๊ณ„๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค."๋ผ๊ณ  ์ง•์ง• ๋Œ€๋Š” ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์‹œ๊ฐ„ ".

shims.d.ts ํ•ดํ‚น์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด.

Webpack https://github.com/Microsoft/TypeScript/issues/11108#issuecomment -285356313์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ์œ„ํ•œ ์ž„์‹œ ์†”๋ฃจ์…˜

์›ํ•˜๋Š” UMD ์ „์—ญ์œผ๋กœ externals ์„ webpack.config.js ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    externals: {
        'angular': 'angular',
        'jquery': 'jquery'
        "react": "React",
        "react-dom": "ReactDOM"
    }

๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

jQuery๊ฐ€ ์ „์—ญ์œผ๋กœ ํฌํ•จ๋˜๋Š” requirejs๋กœ ๊ตฌํ˜„ ๋œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ „์—ญ์œผ๋กœ ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ jQuery๋ฅผ ํ™•์žฅํ•˜๋Š” ์ผ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

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

๊ฒŒ๋‹ค๊ฐ€ ๋ชจ๋“ˆ ๋กœ๋”์—†์ด ์ž๋ฐ” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํŽ˜์ด์ง€๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ „์—ญ ๋ฐ ๋ชจ๋“ˆ ๋ชจ๋‘์—์„œ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

jQuery ์™ธ์—๋„ ๋…น์•„์›ƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ํ”„๋กœ์ ํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ๋งค์šฐ ์–ด๋ ค์›Œ์กŒ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ํ˜„์‹ค์ ์ธ ๊ด€์ ์—์„œ ์‹คํ–‰ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๊ฒƒ์ด ์ตœ์„ ์˜ ํŒจํ„ด์€ ์•„๋‹ˆ๋ฉฐ ์ƒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋งŒ์ด ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์ง€๋Š” ์•Š์•„

types ์—์„œ tsconfig.json types ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด์น˜์— ๋งž์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด types ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ํ˜„์žฌ ์•”์‹œ ์  ๋™์ž‘์„ ์–ป๊ณ  types ์„ค์ •ํ•˜๋ฉด ๋ฌธ์ž ๊ทธ๋Œ€๋กœ "์ด๊ฒƒ๋“ค์€ ์ „์—ญ ์ ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๊ณ  UMD ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋ฅผ ์ „์—ญ ์ ์œผ๋กœ ํ‘œ์‹œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๋Š” ํ–‰๋™์˜ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค (์ „์—ญ ์  ํž˜ ๋นผ๊ธฐ). ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด globals ์˜ต์…˜์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜๋Œ€๋ฉ๋‹ˆ๋‹ค.

์ข‹์€ ์ƒ๊ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” UMD ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ชจ๋“ˆ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ tsconfig.json์œผ๋กœ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

@blakeembrey types ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ด์น˜์— ๋งž์ง€๋งŒ , ์ด๋ฏธ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๋ถ€ํ•˜๋ผ๋Š” ๊ฐœ๋…์— ๋„ˆ๋ฌด ์—ด์ค‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด <reference types="package" /> ๊ตฌ์„ฑ์—๋Š” ์ด๋ฏธ "paths" ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. "package" ๋Š” @types ์˜ ํด๋” ์ด๋ฆ„์„ ์ฐธ์กฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋Œ€ํ™”๋ฅผ ๋”ฐ๋ผ๊ฐ€๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ณ„ํš๋œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? lodash๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„์ด๊ฑฐ๋‚˜ ๋” ๋งŽ์€ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ฐฝ์— ์˜์กดํ•˜๋Š” ๋Œ€์‹  ๋” ๋ชจ๋“ˆํ™” ๋œ ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์œ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ๊ณ„ํš๋œ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฑฐ๋‚˜ ์ ์–ด๋„ ํ˜„์žฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฆด๋ฆฌ์Šค์—์„œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฌธ์„œํ™” ํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @mochawich ์ €๋Š” React๋ฅผ ์™ธ๋ถ€๋กœ ์ •์˜ํ•˜๊ณ  declare global ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

TS2686: 'React' refers to a UMD global, but the current file is a module. Consider adding an import instead.

@cantux TypeScript๋Š” Webpack ๊ตฌ์„ฑ์„ ์ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. React๋ฅผ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค๋ฉด declare ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@aluanhaddad ์ฃผ๋กœ ๊ฐ€์ ธ ์˜ค๊ธฐ ํ˜ธ์ถœ๋กœ ์ˆ˜ํ–‰ ํ•œ ์ž‘์—…๊ณผ ํ˜ผ๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€๋ฅผ ๋งŒ์กŒ๋‹ค. ๋‹ค์Œ ์ง„์ˆ ์ด ๋งž์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์•ฝ๊ฐ„์˜ ์š”์ฒญ ๋น„์šฉ์„ ์ง€๋ถˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์š”์ฒญํ•œ ๊ฒฝ์šฐ ๋ชจ๋“ˆ์ด ์บ์‹œ์—์„œ๋กœ๋“œ๋˜๊ณ  ๋ชจ๋“ˆ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด ์š”์ฒญ์„ ํ”ผํ•˜๋ ค๋ฉด ๋ฌด์–ธ๊ฐ€๋ฅผ ์ „์—ญ์œผ๋กœ ์ •์˜ํ•˜๋ฉด Typescript๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋งน๋ชฉ์ ์œผ๋กœ ์‹ ๋ขฐํ•ฉ๋‹ˆ๋‹ค (์Šค๋งˆํŠธ ๋ฒˆ ๋“ค๋Ÿฌ ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์ฒด / ์ œ๊ฑฐ ํ•  ์ˆ˜๋„ ์žˆ์Œ).

์ด๊ฒƒ์ด ๋งž๋‹ค๋ฉด ๊ฐ„๊ฒฐ์„ฑ์„ ์œ„ํ•ด ์ฃผ์„์„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ๊ทธ๋Œ€๋กœ ๊ฑฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

@codymullins ๊ฐ€ ์œ„์—์„œ ์งˆ๋ฌธํ–ˆ๋“ฏ์ด

๋‚ด ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ์ด์ „ ์ž‘์—… ํ‘œ์ค€์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด typedef ํŒŒ์ผ์„ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ด์—ˆ์ง€๋งŒ ๋” ๋งŽ์€ typedef ํŒŒ์ผ์ด ์†์ƒ๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ํŽ˜์ด์ง€ ์•ฑ์—์„œ ์—ฌ๋Ÿฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (lodash ํฌํ•จ)๋ฅผ

์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ shim ์˜ˆ์ œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ vscode๊ฐ€ ์˜ค๋ฅ˜๋กœ ๊ฐ•์กฐ ํ‘œ์‹œํ•˜์ง€๋งŒ (์•„์ง๋„ ์ œ๋Œ€๋กœ ์™„๋ฃŒํ•˜๋”๋ผ๋„!)

๋ชจ๋“ˆ์—์„œ UMD ์ „์—ญ์— ์•ก์„ธ์Šค ํ•  ๋•Œ ์˜ค๋ฅ˜๋ฅผ์ฃผ์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ œ๊ฐ€ ์ž‘์—…ํ•˜๊ณ ์žˆ๋Š” ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ๋Š” AngularJS์—์„œ ์ˆ˜ํ–‰๋˜์—ˆ์œผ๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— Typescript๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€๋งŒ ๋ฌผ๋ก  angular UMD ์ „์—ญ ๋ฐ @types/angular Angular ์œ ํ˜•์— ๋Œ€ํ•ด ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” Typescript๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ๋งŒ ํผ ์‰ฝ๊ฒŒ ๋  ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ "angular" ์— types ์—์„œ tsconfig.json ํ•˜์ง€๋งŒ, ์–ด๋–ค ์ด์œ , ๊ทธ๊ฒƒ์€ํ•˜์ง€ ์•Š๊ณ , TSC ๋‚˜๋ฅผ ๋น„๋ช…. ๋ชจ๋“  NPM ํŒจํ‚ค์ง€๊ฐ€ ์ˆœ์ˆ˜ํ•œ Typescript ์˜€์œผ๋ฉดํ•˜๋Š”๋งŒํผ ๋Œ€๋ถ€๋ถ„์€ ์ผ๋ฐ˜ JS์ด๋ฉฐ ์˜ค๋žซ๋™์•ˆ ์œ ์ง€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. UMD ์ „์—ญ์ด ์กด์žฌํ•œ๋‹ค๊ณ  d.ts ๊ฐ€์ ธ์˜ฌ ๋•Œ TSC๊ฐ€ ์ข…๋ฃŒ ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๋ฅผ ์ •๋ง๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด ์ƒํ™ฉ์€ ํ”ํ•œ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ž‘์—… ํ•ด๋ณธ ๋ชจ๋“  Typescript ํ”„๋กœ์ ํŠธ๋Š” ๋‚ด๊ฐ€ ๋ฌถ์–ด์„œ ํƒ€์ž… ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐํ•ด์•ผํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€ : CDN์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์กด์˜ ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ์œ ํ‹ธ๋ฆฌํ‹ฐ๋Š” ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€ (์˜ˆ : clipboardjs, lodash)์—์„œ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ „์—ญ ๋ณ€์ˆ˜๋Š” ํŽ˜์ด์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฐธ์กฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ด€๋ จ ์†Œ์Šค ํŒŒ์ผ์˜ ๋งจ ์œ„์— /// <reference type="$name" /> ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ typescript ์ปดํŒŒ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ชจ๋“ˆ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•  ๋•Œ ์ž‘๋™์„ ๋ฉˆ ์ถฅ๋‹ˆ ๋‹ค.

์Šค๋ ˆ๋“œ์—์„œ ์ œ์•ˆ ๋œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ๋ฒ•์ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  1. /// <reference type="$name" /> ๊ฐ€์ ธ ์˜ค๊ธฐ ํ† ํฐ์„ ํ˜„์žฌ ํŒŒ์ผ์˜ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋กœ๋งŒ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

  2. tsconfig.json ์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜ / ๊ตฌ์„ฑ ๋ณ€์ˆ˜ (์˜ˆ : "globals" , "types" )

๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ชจ๋‘ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @RyanCavanaugh ์˜ ์˜ต์…˜ 1์— ๋Œ€ํ•œ ๋น„ํŒ์— ๋™์˜ํ•˜์ง€๋งŒ :

๋ฐ˜๋Œ€๋กœ ํ•ด๋‹น ํŒŒ์ผ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ์กฐ ์ง€์‹œ๋ฌธ์„ ๋ชจ๋“  ๊ณณ์—์„œ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ ๋„ฃ์–ด์•ผํ•˜๋Š”๋ฐ, ์ด๋Š” ์ •๋ง ์„ฑ๊ฐ€์‹  ์ผ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋™์ž‘์œผ๋กœ ์ธํ•ด UMD ์ „์—ญ๊ณผ ํ•จ๊ป˜ ๋ชจ๋“ˆ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์„ฑ๊ฐ€์‹  ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€์—†๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์—ฌ์ „ํžˆ ๋ฏธ๊ฒฐ์ž…๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@types ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š์€ ํŒจํ‚ค์ง€๋ฅผ ์ „์—ญ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— npm install -D @types/underscore ์ด๋ฉด ๋ฐ‘์ค„์—์„œ ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€์ ธ ์˜ค์ง€ ์•Š๋Š” ๋ชจ๋“ˆ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ _ ์ „์—ญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์•„๋ž˜ ์ฐธ์กฐ).

types-ref

๊ทธ๊ฒŒ ๋‹น์‹ ์ด ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@billti ์•„๋งˆ๋„ ๋‚ด๊ฐ€ ์˜คํ•ดํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ท€ํ•˜์˜ ์˜ˆ๋Š” ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฌํ˜„์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ :

js / foo.ts :

// <reference types="js-cookie">

import { Bar } from "./bar";

const Foo = {
    set: function() {
        Cookies.set("foo", "bar");
    },
    get: function() {
        console.log(Cookies.get("foo"));
    }
};

window.onload = function() {
    console.log(Cookies);
}

js / bar.ts

const Bar = {
    x: 3
};

export { Bar };

package.json :

{
  "name": "foo",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "private": true,
  "devDependencies": {
    "@types/js-cookie": "^2.1.0",
    "typescript": "^2.7.1"
  },
  "dependencies": {
    "http-server": "^0.11.1"
  }
}

tsconfig.json

{
    "compilerOptions": {
        "module": "system"
    },
    "files": [
        "js/foo.ts"
    ]
}

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ :

js / foo.ts (7,3) : ์˜ค๋ฅ˜ TS2686 : '์ฟ ํ‚ค'๋Š” UMD ์ „์—ญ์„ ์ฐธ์กฐํ•˜์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
js / foo.ts (10,15) : ์˜ค๋ฅ˜ TS2686 : '์ฟ ํ‚ค'๋Š” UMD ์ „์—ญ์„ ์ฐธ์กฐํ•˜์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
js / foo.ts (15,14) : ์˜ค๋ฅ˜ TS2686 : '์ฟ ํ‚ค'๋Š” UMD ์ „์—ญ์„ ์ฐธ์กฐํ•˜์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ€์ ธ ์˜ค๋Š” ๋™์ž‘์€ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์ด "์ ์ ˆํ•œ"UMD ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ( "์ฟ ํ‚ค"๋ฅผ ์‚ฌ์šฉํ•œ ๋™์ž‘) ๋˜๋Š” "๋™์‹œ์— ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™"๋ชจ๋“ˆ (lodash ์ž‘์„ฑ ๋ฐฉ๋ฒ•)์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. .

๊ฐœ์ฒด๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๋Š” .d.ts ํŒŒ์ผ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์„ฑํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๋ถˆ์ผ์น˜์™€ ๊ฐœ๋ฐœ์ž๋ฅผ์œ„ํ•œ ๊ฒฝํ—˜์˜ ๋ถˆํˆฌ๋ช…์„ฑ ๋•Œ๋ฌธ์— "UMD ์ „์—ญ ์ œํ•œ ์ œ๊ฑฐ"๋ฐฉํ–ฅ์œผ๋กœ ์ƒ๋‹นํžˆ ๊ธฐ์šธ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. --noStrictUMD ์˜ตํŠธ ์•„์›ƒ์œผ๋กœ --strict ์•„๋ž˜์— ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋‹ค๋ฅธ ๊ฒƒ์€ Monaco์˜ ๋งž์ถคํ˜• AMD ๋กœ๋”๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ AMD ๋™์ž‘์˜ ์ผ๋ถ€ ํ•˜์œ„ ์ง‘ํ•ฉ (์—„์ฒญ๋‚œ ์•„์ด ๋กค ์‚ฝ์ž…)์„ ์ง€์›ํ•˜์ง€๋งŒ ๊ธ€๋กœ๋ฒŒ 'ํ•„์ˆ˜'๋ฅผ ๋ฐŸ์•„์„œ ์ ์ ˆํ•œ UMD ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๊ธฐ๊ฐ€ ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ชจ๋“ˆ์€ '์š”๊ตฌ'๊ธ€๋กœ๋ฒŒ์„๋ณด๊ณ  ์ œ๋Œ€๋กœ๋กœ๋“œํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‚˜์ฝ” ๋ชจ๋“ˆ ๋กœ๋”. ๊ฒฐ๊ตญ Monaco ๋กœ๋”์˜ ์Šคํฌ๋ฆฝํŠธ ํƒœ๊ทธ ์œ„์— UMD JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋„ฃ์€ ๋‹ค์Œ TS๋Š” ๋ชจ๋“ˆ (Monaco API๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•จ)์—์„œ ์ „์—ญ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”.

๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋‹ค๋ฅธ ๊ฒƒ์€ Monaco์˜ ๋งž์ถคํ˜• AMD ๋กœ๋”๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ AMD ๋™์ž‘์˜ ์ผ๋ถ€ ํ•˜์œ„ ์ง‘ํ•ฉ (์—„์ฒญ๋‚œ ์•„์ด ๋กค ์‚ฝ์ž…)์„ ์ง€์›ํ•˜์ง€๋งŒ ๊ธ€๋กœ๋ฒŒ '์š”๊ตฌ'๋ฅผ ๋ฐŸ์•„์„œ ์ ์ ˆํ•œ UMD ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋ชจ๋‚˜์ฝ” ๋ชจ๋“ˆ ๋กœ๋”.

๐Ÿ˜

๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ ๊ณ ์น  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ €๋Š” ์ตœ๊ทผ ๋ชจ๋“ˆ์˜ ๋ณต์žก์„ฑ ๋น„์šฉ์— ๋Œ€ํ•ด ๋งŽ์€ ์ƒ๊ฐ์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒํ˜ธ ์˜์กด์ ์ด๋ฉฐ ๋ถ€๋ถ„์ ์œผ๋กœ ํ˜ธํ™˜๋˜๋Š” ๋กœ๋”, ๋ฒˆ ๋“ค๋Ÿฌ, ํŠธ๋žœ์Šค ํŒŒ์ผ๋Ÿฌ, ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž ๋ฐ ํ”„๋ ˆ์ž„ ์›Œํฌ๊ฐ€ ๋„ˆ๋ฌด๋‚˜๋„ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ ๋ณต์žก์„ฑ์ด ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋–ค ์•Œ๋ฆผ๋„ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ™‰).

๊ฐœ๋ฐœ์ž๋กœ์„œ ์šฐ๋ฆฌ๋Š” 5-6 ๋…„ ์ „๋ณด๋‹ค ํ›จ์”ฌ ๋” ๋ณต์žกํ•œ ํˆด์ฒด์ธ์„ ๋ฐ›์•„๋“ค์˜€์œผ๋ฉฐ ๋ณต์žก์„ฑ์˜ ์ฃผ์š” ์›์ธ์€ ๋ชจ๋“ˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํฌ๊ธฐํ•˜๊ณ  ์ด๋Ÿฌํ•œ UMD ํŒจํ‚ค์ง€๋ฅผ ์ „์—ญ์œผ๋กœ๋กœ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ฌด์—‡์„์œ„ํ•œ ๊ฒƒ์ผ๊นŒ ์š”?

ํ•˜์ง€๋งŒ ... ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋ ‡๊ฒŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค!

๋‚ด ๋ง์€,์ด Stack Overflow Answer ๋Š” 61 ๐Ÿ‘์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ง€๋‚œ ๋ฐ˜๋…„ ๋™์•ˆ ํŒจํ‚ค์ง€์˜ 99 %์— ๋Œ€ํ•ด ๋ชจ๋“  ์ž˜๋ชป๋œ ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. (์ €์ž๋Š” ์˜ค๋Š˜ ์•„์นจ ์ œ๊ณต๋œ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ธํ•ด UMD ์ข…์†์„ฑ์— ๋Œ€ํ•œ _option_ ๋ชจ๋“ˆ์„ ์–ธ๊ธ‰ํ•˜๋„๋ก ์นœ์ ˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.)

์ด ๋ชจ๋“  ๊ฒƒ์ด ์ •๋งฅ์— ๋“ค์–ด๊ฐ€์„œ ๊ธ€๋กœ๋ฒŒ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค!

ํ•˜์ง€๋งŒ ... ์‚ฌ๋žŒ๋“ค์€ ๊ทธ๋ ‡๊ฒŒํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ๋Š” JS ๋ชจ๋“ˆ์˜ ๊ตฌ์ƒ๊ณผ ๊ตฌํ˜„์ด ๋ชน์‹œ ํ˜•ํŽธ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ „์—ญ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚ซ๊ณ  ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ ์ ˆํ•˜๊ฒŒ ์„ค๊ณ„๋˜๊ณ  ๊ตฌํ˜„ ๋˜์—ˆ๋‹ค๋ฉด ...

๋‹ค์–‘ํ•œ ๋กœ๋” ๋ฐ ์ผ๋ถ€ ๋กœ๋”์™€์˜ ๋‹ค์–‘ํ•œ ํ˜ธํ™˜์„ฑ ์ˆ˜์ค€์„ ๊ฐ€์ง„ ๋ชจ๋“ˆ๋กœ ์ข…์†์„ฑ์„๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋„ˆ๋ฌด ๋ฒˆ๊ฑฐ๋กญ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ๊ณผ UMD ์ „์—ญ์„ ํ˜ผํ•ฉํ•˜์—ฌ ์ผ์น˜์‹œํ‚ค๊ณ  ๋Œ€์‹  ์ง์ ‘ ์ข…์†์„ฑ ๋ฒˆ๋“ค๋ง์„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ๋‹ฌ๋ฆด ๋ถ„.

์ด "๊ธฐ๋Šฅ"์€ ์‹ค์ œ๋กœ UMD ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๊ณต์‹ UMD ๋ชจ๋“ˆ ์ง€์›์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. .d.ts ํŒŒ์ผ์—์„œ ์ „์—ญ์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๋Š” ํ•ด๋‹น ์ด๋ฆ„์˜ ์ž์ฒด ๋ชจ๋“ˆ์„ ์ˆ˜๋™์œผ๋กœ ๊ฐ–๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ต์…˜ 2๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ผ๋ถ€ ๊ตฌ๋ฌธ ๋˜๋Š” ๊ตฌ์„ฑ์—์„œ "์ด UMD ์ „์—ญ์€ ์‹ค์ œ๋กœ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ํ‘œ์‹œํ•˜๋„๋ก ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๊ตฌ์‹ ์Šคํƒ€์ผ์˜ js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ๋‹ค๋Š” ๊ฒƒ๋„ ๋„์›€์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ๋‹ค์‹œ ์“ฐ๋Š” ๊ฒƒ์€ ์˜๋ฌธ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ๋‹จํ•œ ์šด๋™
๋กค์—…์ด ๋ชจ๋‘ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ๋‚ด ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ "์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ž๋ฐ”"๋ฅผ ๋น„์›ƒ์ง€ ๋งŒ ํ‰๋ฒ”ํ•œ ์ž๋ฐ”๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ
1.0์—์„œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ. ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์™„์ „ํ•œ ์—‰๋ง์€ ์•„๋‹ˆ ์—ˆ์Šต๋‹ˆ๋‹ค.

"UMD ์Šคํƒ€์ผ ์ „์—ญ ํ—ˆ์šฉ"์€ ํ™•์‹คํžˆ ์˜ต์…˜์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

2018 ๋…„ 4 ์›” 2 ์ผ ์›”์š”์ผ ์˜ค์ „ 1:40 Kagami Sascha Rosylight <
[email protected]> ์ž‘์„ฑ :

๋‚˜๋Š” ํ•ด๊ฒฐํ•ด์•ผํ–ˆ๋‹ค :

/ * ๋ชจ๋“ˆ : es2015 * /
// js-yaml์€ UMD๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ES2015 ๋ชจ๋“ˆ์€ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! import * as _jsyaml from "js-yaml"; declare var jsyaml : typeof _jsyaml; jsyaml.safeLoad ( "");

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/Microsoft/TypeScript/issues/10178#issuecomment-377885832 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AA50ljAD33sr09EGFVAsURbu1x75X-lOks5tkeQCgaJpZM4Jd8jX
.

>

๋‹ค๋‹ˆ์—˜ ์กฐ์ด์Šค

์˜จ์œ  ํ•œ์ž๋Š” ์ง€๊ตฌ๋ฅผ ์ƒ์†๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฉ๊ฐํ•œ์ž๋Š” ๋ณ„๋“ค ์‚ฌ์ด์—์žˆ์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Angular ํ”„๋กœ์ ํŠธ์—์„œ three.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ˆ˜์ž…ํ•œ๋‹ค

import * as THREE from "three";

import {Vector3} from "three"; ๋„ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

three ๋ฐ @types/three npm ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์œผ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ three/build/three.module.js ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @types/three/index.d.ts ํŒŒ์ผ์€ export as namespace THREE ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ œ๊ฐ€ ์™„์ „ํžˆ ์ต์ˆ™ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์— ๋ฌธ์ œ๋Š” three.js ์‹œ์Šคํ…œ์— OrbitControls.js ๋ผ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ด€๋ จ ํŒŒ์ผ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๊ธฐ๋ณธ์ ์œผ๋กœ ์†๊ฐ€๋ฝ์ด๋‚˜ ๋งˆ์šฐ์Šค๋กœ 3D ์ด๋ฏธ์ง€๋ฅผ ํšŒ์ „ ํ•  ์ˆ˜ ์žˆ์Œ). ๋ฌธ์ œ๋Š”์ด ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ ๊ณต์‹์ ์œผ๋กœ three.js ๋ฐฐํฌ์˜ ์ผ๋ถ€์ด์ง€๋งŒ examples ํŠธ๋ฆฌ์—์žˆ๋Š” ํ‰๋ฒ”ํ•œ ์ด์ „ JS ํŒŒ์ผ์ด๋ฉฐ THREE ์†์„ฑ์— ์ง์ ‘ ๋ฐฐ์น˜๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ ๋‹ค๋ฅธ API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  window.THREE ์—์„œ ์ฐพ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ๋‹ค๋ฅธ API๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํŒŒ์ผ์ด "ํ•„์š”"ํ•˜๋”๋ผ๋„

require("three/examples/js/controls/OrbitControls.js");

window.THREE ๋ฅผ ์ฐพ์„ ์ˆ˜์—†๊ณ  ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” THREE ์‹œ์Šคํ…œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง์ ‘ ๊ฐ๋„ ์‚ฌ์šฉํ•˜์—ฌ ์ „์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํฌํ•จ ํ•  ์ˆ˜ scripts ์žฌ์‚ฐ angular.json (๊ตฌ์‹ ๊ฑฐ์˜ ๋น„์Šท <script> ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์ž˜๋ชป ๋‚œ ์•„๋‹ˆ์—์š” ๊ฒฝ์šฐ, ํƒœ๊ทธ) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‘ ๋ฒˆ๋กœ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด import * as THREE from "three"; ๋ฌธ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. foo: THREE.Vector3 ์™€ ๊ฐ™์€ ์œ ํ˜•์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ™•์ธํ•  ์ˆ˜ ์žˆ์ง€๋งŒ new THREE.Vector3() ๊ฐ™์€ ์ฐธ์กฐ๋Š” ์•…๋ช… ๋†’์€

'THREE'๋Š” UMD ์ „์—ญ์„ ์ฐธ์กฐํ•˜์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. [2686]

์ด ์‹œ์ ์—์„œ ์ €๋Š” OrbitControls.js ํŒŒ์ผ๊ณผ ES6-ify ๋ฐ / ๋˜๋Š” TS-ify ํŒŒ์ผ์„ ๊ฐ€์ ธ์™€์•ผ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 'orbit-controls-es6' ์™€ ๊ฐ™์€ ํ˜•์‹์ด๋ฏ€๋กœ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์†์— ๋‚ด ์‚ถ์„ ๋งก๊ธฐ๋Š” ๊ฒƒ์„ ์‹ซ์–ดํ•˜๋”๋ผ๋„ ๋‚ด ์‚ถ์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฐ˜ ๊ด€๋ จ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ์—์„œ ํ•œ ๊ฐ€์ง€ ์ด์ƒํ•œ ์ ์€ @types/three ์ฝ”๋“œ ์ž์ฒด๊ฐ€ three ๋ชจ๋“ˆ ์ž์ฒด์— ์žˆ์ง€ ์•Š๋”๋ผ๋„ OrbitControls ์œ ํ˜•์„ ์ •์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ OrbitControls ๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๋ชจ๋“  ์œ ํ˜•์„ ์–ด๋–ค ๊ฒƒ๊ณผ๋„ ์—ฐ๊ด€์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ orbit-controls-es6 ์˜ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์ด์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งˆ์นจ๋‚ด ์ƒ๊ฐํ•ด ๋‚ธ ํ•ด๊ฒฐ์ฑ…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import * as THREE from "three";
Object.defineProperty(window, "THREE", {get() { return THREE; }});
require("three/examples/js/controls/OrbitControls.js");

์ด์œ ๋Š” ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํŒŒ์ผ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ–‰์ด ์žˆ์Šต๋‹ˆ๋‹ค.

THREE.OrbitControls = funtion() { };

์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผํ•˜๋Š” import * as THREE from "three"; ๋ฌธ์œผ๋กœ ์ธํ•ด ๊ฒฐ๊ณผ์ ์œผ๋กœ 3 ๊ฐœ์˜ "๋„ค์ž„ ์ŠคํŽ˜์ด์Šค"์— ํ• ๋‹น๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

@RyanCavanaugh ๊ฐ€ # 26223์˜ ํ”ผ๋“œ๋ฐฑ์„ ์—ฌ๊ธฐ์— ๋ณต์‚ฌ ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์˜์กดํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํ™•์‹คํžˆ ํ˜•์‹ํ™” ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€์žˆ๋Š” ๋‹ค์†Œ ํฐ TypeScript ์ฝ”๋“œ๋ฒ ์ด์Šค (Google์˜ ๋‚ด๋ถ€ ๋ชจ๋…ธ ๋ ˆํฌ)๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ์‚ฌ์šฉ์ž๋Š” .d.ts ๊ฐ€ ์™ธ๋ถ€ ๋ชจ๋“ˆ๋กœ ๋ฐ”๋€Œ๊ธฐ ์ „์— angular ์™€ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ „์—ญ ์œ ํ˜•์— ์˜์กดํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ชจ๋“ˆ๊ณผ ๋ช…์‹œ ์  ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๋ฒ ์ด์Šค๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ export as namespace d UMD ์ „์—ญ์€ ์œ ํ˜• ๋ฐ ๊ฐ’ ์ฐธ์กฐ ๋ชจ๋‘์— ๋Œ€ํ•ด ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ๋ช…์‹œ์ ์ธ ๊ฐ€์ ธ ์˜ค๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์˜ˆ์ƒํ–ˆ์œผ๋ฉฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•  ๋•Œ ๋‹ค์‹œ ์•Œ์•„ ์ฐจ๋ฆฌ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค (์›ƒ์Œ).

๊ฐ€์ ธ ์˜ค์ง€ ์•Š์€ ์ฝ”๋“œ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

  • ์ด๋Š” ์ฝ”๋“œ๊ฐ€ ์ „์—ญ "๋ฐฑ๊ทธ๋ผ์šด๋“œ"์œ ํ˜• ์ •์˜์— ์˜์กดํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ฝ๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค (ํŠนํžˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๊ธฐํ˜ธ๋กœ ์ด๋™ํ•˜์ง€ ์•Š๋Š” ์ฝ”๋“œ ๊ฒ€ํ† ์—์„œ).

  • ์ฝ”๋“œ ์ข…์†์„ฑ์„ ๋ชจํ˜ธํ•˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ bazel์—์„œ ๊ตฌํ˜„ํ•˜๋Š” "์—„๊ฒฉํ•œ deps"๋ผ๊ณ ํ•˜๋Š” "๋ชจ๋“  ์ž„ํฌํŠธ์— ๋Œ€ํ•ด ๋ช…์‹œ์ ์ธ ๋นŒ๋“œ ๋ ˆ๋ฒจ ์˜์กด์„ฑ์„ ๊ฐ€์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค"์ œ์•ฝ์„ ์šฐํšŒํ•ฉ๋‹ˆ๋‹ค.

    ๋Œ€๊ทœ๋ชจ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ๋Š” ์ฝ”๋“œ์— ๋ช…์‹œ์ ์ธ ์ข…์†์„ฑ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ €์žฅ์†Œ๋ฅผ ๊ด€๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์—†๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ A -> B -> C ๋ฐ ์ „์—ญ ์œ ํ˜•์„ ์ถ”์ ํ•˜๋Š” ์ข…์†์„ฑ์ด์žˆ๋Š” ๊ฒฝ์šฐ B ์— C ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— B A ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ธฐ๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์— B ๊ฐ€ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋ฉด A ๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ €์žฅ์†Œ์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€ ์ฝ”๋“œ ๊ฒฉ๋ฆฌ๋ฅผ ์œ„๋ฐ˜ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ๊ฐ’์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์ ‘๋‘์‚ฌ๊ฐ€์žˆ๋Š” ๋ชจ๋“ˆ์„ ์ผ๊ด€์„ฑ์—†์ด ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค๋ฅธ ์ ‘๋‘์‚ฌ์™€ ํ•จ๊ป˜ ํ•ด๋‹น ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค (ํŠนํžˆ AngularJS, ng ๋Œ€ angular์˜ ๊ฒฝ์šฐ).

๊ณต๊ธ‰ ์—…์ฒด์˜ DefinitelyTyped ์‚ฌ๋ณธ์—์„œ export as namespace ๋ฌธ์„ ์ œ๊ฑฐํ•˜์—ฌ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ ์–ด๋„ ์šฐ๋ฆฌ์—๊ฒŒ๋Š”์ด ๊ธฐ๋Šฅ์ด ์ฝ”๋“œ ์œ ์ง€ ๊ด€๋ฆฌ ๋ฐ ์—”์ง€๋‹ˆ์–ด๋ง ๋ชฉํ‘œ์— ๋ฐ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ๊ตฌ๊ธ€๊ณผ ๊ฐ™์€ ๋‹จ์ผ ์ €์žฅ์†Œ ์ƒํ™ฉ์—์„œ ๋” ๋‘๋“œ๋Ÿฌ์ง„๋‹ค ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ์ž‘์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์—๋„ ์ ์šฉ๋œ๋‹ค.

๊ท€ํ•˜๊ฐ€ ๊ฒŒ์‹œ ํ•œ ์‚ฌํ•ญ์€ ์šฐ๋ฆฌ ์ƒํ™ฉ์— ์ ˆ๋Œ€์ ์œผ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” AMD ๋ชจ๋“ˆ๋กœ ์šฐ๋ฆฌ ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ†ต์ œ ํ•  ์ˆ˜์—†๋Š” ์ƒํ™ฉ์œผ๋กœ ์ธํ•ด UMD ๋ชจ๋“ˆ์— ์˜์กด์„ฑ์„ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ JS ๋ชจ๋“ˆ์€ ๊ฐœ๋…๊ณผ ๊ตฌํ˜„ ๋ชจ๋‘์—์„œ ๋”์ฐํ•œ ๊ฒฐํ•จ์ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์š”์•ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค). ์ด ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” ์‚ถ์„ ์ƒ๋‹นํžˆ ๋‹จ์ˆœํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TS3๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์ด๋ฅผ ๋ฐฉ์ง€ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒํ•˜๋”๋ผ๋„ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์™„๋ฃŒํ•˜๊ธฐ๊นŒ์ง€๋Š” ์ ์–ด๋„ 2 ๋…„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ด๋ฆฐ ์งˆ๋ฌธ : " ๋ชจ๋“  UMD ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ํ—ˆ์šฉ"์— ๋Œ€ํ•œ ํ•˜๋‚˜์˜ ์ „์—ญ ํ”Œ๋ž˜๊ทธ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์‹ค์ œ๋กœ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๋ชจ๋“ˆ ๋ณ„ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

"๋‹จ์ง€ ํ•˜๋‚˜์˜ ๊นƒ๋ฐœ"์— โค๏ธ ํˆฌํ‘œ
"๋ชจ๋“ˆ ๋ณ„ ์ œ์–ด ํ•„์š”"์— ๐ŸŽ‰ ํˆฌํ‘œ

๋˜ํ•œ tsconfig.json ์˜ "types" ์˜ต์…˜์— ๋ช…์‹œ์ ์ธ ๋ชฉ๋ก์ด ์žˆ์–ด๋„ ๋ชจ๋“ˆ์—์„œ UMD ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”์ง€ ๊ณ ๋ คํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ ํ˜•์ด ์˜๋„์ ์œผ๋กœ ์กด์žฌ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. (๋ถ„๋ช…ํžˆ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์„ ์žŠ์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐฐ์ œํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค).

๋˜๋Š” ์œ ์‚ฌํ•˜๊ฒŒ /// <reference types="..." /> ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“ˆ (์ฆ‰, ์–ธ๊ธ‰ ๋œ '๋ชจ๋“ˆ ๋ณ„ ์ปจํŠธ๋กค')์—์„œ ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ UMD ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@RyanCavanaugh # 26233์—๋„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•  ์˜ˆ์ •์ž…๋‹ˆ๊นŒ?

26233์€ ์˜๋„ ํ•œ๋Œ€๋กœ ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์—์„œ UMD ์ „์—ญ์˜ ์œ ํ˜• ์ธก๋ฉด์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฒ•์ ์œผ๋กœ ๋ฌดํ•ดํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด "ํ•ฉ๋ฒ•์ ์œผ๋กœ ๋ฌดํ•ดํ•œ ์ง€"ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค. @types/jquery ๋ฅผ ์˜ˆ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. $ ๋ฐ jQuery ๋Š” JQueryStatic ์ธํ„ฐํŽ˜์ด์Šค์— ๋งคํ•‘๋˜๊ณ  ์ƒ์ˆ˜๋กœ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ชจ๋“  ๋ชจ๋“ˆ์€ ๊ฐ€์ ธ ์˜ค๊ธฐ์—†์ด $ ๋ฐ jQuery ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋น„ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@RyanCavanaugh ์˜ˆ, TS ๋ฐฉ์ถœ์ด ์˜ํ–ฅ์„๋ฐ›์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ๋ฌดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•ก์„ธ์Šค ํ•  ์ˆ˜์žˆ๋Š” @types ๋Œ€ํ•œ ์„ธ๋ฐ€ํ•œ ์ œ์–ด๋ฅผ ์›ํ•œ๋‹ค๋ฉด ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๋ชจ๋“ˆ ๋ฒ”์œ„ ์œ ํ˜•์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ์„ ์ „์—ญ ์œ ํ˜•์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐฉ์ถœ์ด ์˜ํ–ฅ์„๋ฐ›์ง€ ์•Š๋”๋ผ๋„ ์•ก์„ธ์Šค ํ™•๋Œ€๋„ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ jQuery์˜ ๊ฒฝ์šฐ emit๊ฐ€ ์˜ํ–ฅ์„๋ฐ›์Šต๋‹ˆ๋‹ค. $() ๋Š” ๊ฐ€์ ธ ์˜ค๊ธฐ์—†์ด ๋ชจ๋“ˆ์—์„œ ๋‚ด ๋ณด๋ƒ…๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ชจ๋“ˆ์—์„œ UMD ์ „์—ญ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ์ƒˆ ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ PR ์ˆ˜๋ฝ.

๊ตฌํ˜„ ์ธก๋ฉด์—์„œ๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ์ด๋ฆ„์„ ์ง€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ œ์•ˆ ๊ฒ€ํ†  ํšŒ์˜์—์„œ ์ˆ˜์‹ญ ๋ช…์˜ ๋”์ฐํ•œ ์ด๋ฆ„์„ ๊ฑท์–ด์ฐจ ๊ณ  ๋ชจ๋‘ ์‹ซ์–ด ํ–ˆ์œผ๋ฏ€๋กœ ๋ง›์žˆ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ์€ ๋ชจ๋‘์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋‹จํ•˜์‹ญ์‹œ์˜ค.

์šฐ๋ฆฌ๋Š” ์ œ์•ˆ ๊ฒ€ํ†  ํšŒ์˜์—์„œ 12 ๋ช…์˜ ๋”์ฐํ•œ ์ด๋ฆ„์„ ๊ฑท์–ด์ฐจ ๊ณ  ๋ชจ๋‘ ์‹ซ์–ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋“ค์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๋ž˜์„œ ๋ง›์žˆ๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋‚ด๋Š” ๊ฒƒ์€ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋ชซ์ž…๋‹ˆ๋‹ค.

umdUseGlobal ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ.

UMD ์ „์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ export as namespace ์ด๋ฏ€๋กœ UMD ์ „์—ญ ํ”Œ๋ž˜๊ทธ์˜ ์ด๋ฆ„์œผ๋กœ importAllNamespaces ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

@RyanCavanaugh ํŒ€์ด ์œ ํ˜• ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋…ผ์˜ ํ–ˆ์Šต๋‹ˆ๊นŒ?

@FranklinWhale ์˜ˆ.

@saschanaz ์ด๋ฏธ์ด ์งˆ๋ฌธ์„ํ–ˆ์ง€๋งŒ ์ €๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค ... @RyanCavanaugh ์–ด๋–ค ๋”์ฐํ•œ ์ด๋ฆ„์ด ๋…ผ์˜๋˜์—ˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜์‹ญ๋‹ˆ๊นŒ?

์ฒด์ธ์ด ์ด๋ ‡๊ฒŒ ๋œ ๊ฒƒ ๊ฐ™์•„์š”

  • allowUmdGlobalAccessFromModules -๊ฐ€์žฅ ์ •ํ™•ํ•˜์ง€๋งŒ ๋„ˆ๋ฌด ๊ธธ๋‹ค
  • assumeGlobalUmd -์–ด
  • allowModuleUmdGlobals - "์ „์—ญ"??
  • umdAlwaysGlobal -๐Ÿคข
  • allowUmdGlobals -ํ•˜์ง€๋งŒ ์ด๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
  • allowUmdGlobalAccess -๋ชจ๋“ˆ ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ ๋›ฐ์ง€ ๋งŒ ์•„๋ฌด๋„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

๊ฐ•์ œํ•˜๋ฉด ๋งˆ์ง€๋ง‰ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” allowUmdGlobalAccessFromModules ๋ฅผ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š”๋ฐ, ๊ธธ์ด๋Š” ๊ธธ์ง€๋งŒ ๊ทธ ์ •๋ฐ€๋„๋Š” ๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. "๋ชจ๋“ˆ์—์„œ UMD ์ „์—ญ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜์žˆ๋Š” ์˜ต์…˜์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์•„, ๋ฌผ๋ก  allowUmdGlobalAccessFromModules ์ž…๋‹ˆ๋‹ค!"

์ ‘๋‘์‚ฌ "allow"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์˜ต์…˜์˜ ๋ช…๋ช… ๊ทœ์น™๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ... ์•ฝ๊ฐ„์˜ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค :)

allowUmdGlobalAccessFromModules : 31 ์ž

allowSyntheticDefaultImports : 28 ์ž
strictPropertyInitialization : 28 ์ž
suppressExcessPropertyErrors : 28 ์ž
suppressImplicitAnyIndexErrors : 30 ์ž
forceConsistentCasingInFileNames : 32 ์ž

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

์šฐ๋ฆฌ๋Š” ์ตœ์ƒ์œ„ HTML ํŒŒ์ผ์— ์ •์ ์œผ๋กœ ํฌํ•จ ๋œ lodash์™€ ํ•จ๊ป˜ tsc 3.2.2๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. require.js๋กœ; ์ตœ์‹  DefinitelyTyped์—์„œ ์–ป์€ d.ts ์ปดํŒŒ์ผ์— ์‹คํŒจํ•œ ์˜ˆ์ œ ์ฝ”๋“œ :

/// <reference path="..." />

class Example<T extends IThingWithTitle<T>> {

    public test = (arg : T[]) : void => {
        _.sortBy(arg, (el : T) => { return el.title; }); // TS2686: '_' refers to a UMD global, but the current file is a module. Consider adding an import instead.
    };

}

export = Example;

(ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฑฐ๊พธ๋กœ ๋’ค์ง‘์–ด ์•ผํ•œ๋‹ค๊ณ  ๋งํ•˜์ง€ ๋งˆ์„ธ์š”. ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค๋ฉด์—์„œ ๋’ค์ณ์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค)

์—…๋ฐ์ดํŠธ : ((window) ._) / * FIXME https://github.com/Microsoft/TypeScript/issues/10178 * /. sortBy (...) ์ž‘๋™ํ•˜์ง€๋งŒ ์ฃผ๋‹˜, ์ถ”์•…ํ•ฉ๋‹ˆ๋‹ค :-P

@Gilead ,์ด ๋Œ“๊ธ€์˜ ์†”๋ฃจ์…˜์€ ํ˜„์žฌ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. https://github.com/Microsoft/TypeScript/issues/10178#issuecomment -263030856

์ด๊ฒƒ์— ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ๊ธ‰ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค ( [email protected] ).


๋จผ์ € ์ด๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

import 'firebase';

declare global {
  const firebase;
}

์ด๋Š” ์ „์—ญ firebase ์— any ์œ ํ˜•์„ ์•”์‹œ ์ ์œผ๋กœ ์ œ๊ณต ํ•œ ๋‹ค์Œ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค (๋™์ผํ•œ ์ด๋ฆ„)๋ฅผ ์—ฌ๊ธฐ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € firebase ๋ชจ๋“  ์ตœ์ƒ์œ„ ํ‚ค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํˆดํŒ / ์ง€๋Šฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๊ทธ๋Ÿฐ ๋‹ค์Œ any ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ์ „ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๊ทธ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?) :


๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์„ฑ๊ณตํ•˜์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— ์–ธ๊ธ‰ ๋œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค (๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

import _firebase from 'firebase'; // same with = require('firebase') 

declare global {
  const firebase: typeof _firebase;
}

=> 'firebase'๋Š” ์ž์ฒด ์œ ํ˜• ์ฃผ์„์—์„œ ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ์ฐธ์กฐ๋ฉ๋‹ˆ๋‹ค.
(๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ๋ณ„์นญ์ด ์žˆ๋”๋ผ๋„?)


๋‚˜๋Š” ๋˜ํ•œ ์‹œ๋„ํ–ˆ๋‹ค

import * as _firebase from 'firebase';

declare global {
  const firebase: typeof _firebase;
}

=> ๊ฐ€์ ธ ์˜ค๊ธฐ ๋ณ„์นญ '_firebase'์˜ ์ˆœํ™˜ ์ •์˜.
( ์ •์˜ ์— export = firebase; export as namespace firebase; ๋•Œ๋ฌธ ์ผ๊นŒ์š”?)


๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ import 'firebase' ์ˆ˜ํ–‰ํ•˜๋ฉด ๋‹ค์‹œ

'firebase'๋Š” UMD ์ „์—ญ์„ ์ฐธ์กฐํ•˜์ง€๋งŒ ํ˜„์žฌ ํŒŒ์ผ์€ ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค. [2686]


๋ˆ„๊ตฌ๋“ ์ง€ ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๊ฐ์‚ฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ง€๊ธˆ๊นŒ์ง€ ์–ธ๊ธ‰ ๋œ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ์ œ์•ˆ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ •๋ง ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (ํ”Œ๋ž˜๊ทธ, ํŠธ๋ฆฌํ”Œ ์Šฌ๋ž˜์‹œ ์ฐธ์กฐ, tsconfig์˜ types , global ๋˜๋Š” external ๊ฐœ์ฒด ํฌํ•จ) tsconfig์—์„œ).

Re @aluanhaddad ๋‹˜ ์˜ ์ฝ”๋ฉ˜ํŠธ

์ด ๋ชจ๋“  ๊ฒƒ์ด ์ •๋งฅ์— ๋“ค์–ด๊ฐ€์„œ ๊ธ€๋กœ๋ฒŒ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค!

๋‚˜๋Š” ์ „์—ญ์œผ๋กœ ๋Œ์•„ ๊ฐ€๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ช‡ ๊ฐ€์ง€ ์ด์ ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์•ฑ ๋ฒˆ๋“ค๊ณผ ๋ณ„๋„๋กœ ๋ช‡ ๊ฐ€์ง€ ๋ฌด๊ฑฐ์šด ์ข…์†์„ฑ์„๋กœ๋“œํ•˜๋ฉด์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ž‘์—…์— ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ์ด ์ œ๋Œ€๋กœ ์บ์‹œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์•ฑ ๋ฒˆ๋“ค๋งŒํผ ์ž์ฃผ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ฒˆ๋“ค ํฌ๊ธฐ๊ฐ€ ํญ๋ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋•Œ๋กœ๋Š” ์ฝ”๋“œ ๋ถ„ํ• ๋กœ ์ธํ•ด ๋ฒˆ ๋“ค๋Ÿฌ์— ๋™์ผํ•œ ์ข…์†์„ฑ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ํฌํ•จ๋จ). ์ด๋Š” ๋‚ด ์•ฑ ์‚ฌ์šฉ์ž์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์ ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ์ค‘์— ๋‚ด ๋ฒˆ๋“ค์„ ์žฌ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ถ”๊ฐ€ํ•˜๊ธฐ ๋งค์šฐ ์‰ฌ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ ํšŒ์›์ด ๊ทธ๊ฒƒ์„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@RyanCavanaugh ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋“ค์—ฌ๋‹ค๊ณผ ์ข…๋ฅ˜ ์ƒ๊ฐ์˜ ๋‚œ์— ์˜ต์…˜์„ ์ถ”๊ฐ€ ํ•  ํ•„์š”๊ฐ€ ๋ฐ–์œผ๋กœ compiler/types.ts ํ•˜๊ณ ์žˆ๋Š” UMD ๊ธ€๋กœ๋ฒŒ ์ฒดํฌ ์ˆ˜์ • compiler/checker.ts ํ•˜๊ณ , ๋‚˜๋Š”์— ์ถ”๊ฐ€ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐ compiler/commandLineParser.ts ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ...ํ•˜์ง€๋งŒ ์†Œ์Šค์— ์ „ํ˜€ ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์™„๋ฃŒํ•˜๋Š” ๋ฐ ๊ฝค ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (i18n์„ ๊นจ์ง€ ์•Š๊ณ  CLI ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ) . ์ง€๊ธˆ์€ ์ด๋ฏธ ์ถœ์ฒ˜๋ฅผ ์•Œ๊ณ ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ๋ฐ›์•„ ๋“ค์ผ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@simonhaenisch ๋น„ ๋ชจ๋“ˆ ์„ ์–ธ ํŒŒ์ผ์—์„œ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ˆœํ™˜ ์ฐธ์กฐ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ UMD ๋ชจ๋“ˆ ์„ ์–ธ์—์„œ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ firebase ๋Š” ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์ด ์ข‹๊ฒŒ๋„ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š๊ณ  ์„ ์–ธ์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

// umd.d.ts
import firebase = require("firebase");
export import firebase = firebase;
export as namespace UMD;

// global.d.ts
declare const firebase: typeof UMD.firebase;

์•ˆํƒ€๊น๊ฒŒ๋„ ์„ ์–ธ ํ•œ ๊ฒƒ์€ ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ’์ด๋ฏ€๋กœ let x: firebase.SomeInterface ์™€ ๊ฐ™์€ ์ž‘์—…์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋„ค์ž„ ์ŠคํŽ˜์ด์Šค์˜ ๋ณ„์นญ์„ ์ง€์ •ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ declare import firebase = UMD.firebase; ๋Š” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ „ ์ฃผ์„๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ hls.js (UMD) ๋ฐ ์ฐธ์กฐ ์œ ํ˜•์„ ์ง€์—ฐ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

hls.d.ts :

import * as Hls from 'hls.js';
declare global {
    const Hls: typeof Hls;
}

์ง€์—ฐ๋กœ๋“œ ๋œ UMD ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” .ts ํŒŒ์ผ์—์„œ :

/// <reference path="hls.d.ts" />
// now use it
if(Hls.isSupported()){
 ...
} 

Typescript> = 3.0.1 ๋ฐ 3.4.1์—์„œ ํ…Œ์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทผ๊ฑฐ๋Š” ๋™์  ๋ชจ๋“ˆ ๊ฐ€์ ธ ์˜ค๊ธฐ์— ๋Œ€ํ•œ ๋ถˆ์™„์ „ํ•œ ๋ธŒ๋ผ์šฐ์ € ์ง€์›์ž…๋‹ˆ๋‹ค.

@MatthiasHild /// <reference path="hls.d.ts" /> ์ฃผ์„์—†์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘, ์˜ˆ, ์„ ์–ธ์ด ํฌํ•จ ๋œ .d.ts ํŒŒ์ผ ๋‚ด์—์žˆ๋Š” ํ•œ์ด SO ์งˆ๋ฌธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹ค๋ฅธ .ts ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–์ง€ ์•Š๋Š” ํ•œ ๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ๋ฌผ์€ ์ด์œ ).

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