Typescript: ๊ฐ€์ ธ์˜ฌ ๋•Œ node_modules์—์„œ ๋ชจ๋“ˆ ์ฐพ๊ธฐ ์ง€์›

์— ๋งŒ๋“  2014๋…„ 07์›” 25์ผ  ยท  138์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: microsoft/TypeScript

2015๋…„ 11์›” 5์ผ ์—…๋ฐ์ดํŠธ

์•„๋ž˜์—์„œ ์š”์ฒญํ•œ ๊ธฐ๋Šฅ์€ ํ˜„์žฌ 1.8 ์ด์ƒ๋ถ€ํ„ฐ typescript๋กœ ๊ตฌํ˜„๋˜๋ฉฐ ํ•œ ๊ฐ€์ง€ ์ฃผ์š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

typescript.main ๋ฐ typescript.definition ์†์„ฑ์ด ์žˆ๋Š” ๋Œ€์‹  d.ts ํŒŒ์ผ ๋˜๋Š” ์ผ๋ฐ˜ .ts ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” typings ์†์„ฑ์ด ํ•˜๋‚˜๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. .ts ํŒŒ์ผ.

๋กœ์ปฌ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ชจ๋“ˆ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ typings ๊ฐ€ .ts ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ชจ๋“ˆ์„ ๊ฒŒ์‹œํ•  ๊ณ„ํš์ด๋ผ๋ฉด ๋ชจ๋“ˆ์ด ๋‹ค์Œ์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. d.ts ํŒŒ์ผ. ์ด๋Š” ๋ชจ๋“ˆ ์†Œ๋น„์ž๊ฐ€ ๋ชจ๋“ˆ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๊ณ  ํ•ด๋‹น ์œ ํ˜•๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
https://github.com/chanon/typescript_module_example

์—ฌ๊ธฐ์— ๋” ๋งŽ์€ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋ฌธ์„œ ํŽ˜์ด์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html

TypeScript ๊ฐœ๋ฐœ์ž์™€ ๋ชจ๋“  ๊ธฐ์—ฌ์ž์—๊ฒŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์›๋ณธ ๋ฌธ์ œ/๊ธฐ๋Šฅ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๋™๊ธฐ ๋ถ€์—ฌ

TypeScript์—์„œ๋Š” JavaScript์—์„œ npm ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•˜์—ฌ typescript ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

typescript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ node_modules ํด๋”์™€ package.json ํŒŒ์ผ์„ ๋ณผ ๋งŒํผ ๋˜‘๋˜‘ํ•˜๋‹ค๋ฉด ์œ ์ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ ์ด์œ ๋Š” TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” npm ๋ชจ๋“ˆ ๊ฐœ๋ฐœ์ž๊ฐ€ npm ์ž์ฒด๋ฅผ ํ†ตํ•ด ๋ชจ๋“ˆ ์ž‘์„ฑ ๋ฐ ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. TypeScript๋Š” npm์˜ ์ธํ”„๋ผ์™€ ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์„ ํ”ผ๊ธฐ๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

node_modules์˜ ์˜ˆ

์šฐ๋ฆฌ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด:

./node_modules/concator/index.ts
./myApp.ts

๊ทธ๋ฆฌ๊ณ  index.ts์—๋Š” ๋‹ค์Œ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

export function concat(param1: string, param2:string): string {
      return param1 + ' ' + param2;
}

myApp.ts์—์„œ:

import concator = require('concator');  // loads the module from node_modules
var result = concator.concat('I like', 'this.');
var wontWork = concator.concat('this will fail');  // compile error, concat needs 2 params

๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” node_modules์—์„œ ๋ชจ๋“ˆ์„ ์ฐพ์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋˜‘๋˜‘ํ•˜๊ณ  ์ž๋™์œผ๋กœ typescript ๋ฒ„์ „(index.ts)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฝ”๋“œ๊ฐ€ JavaScript๋กœ ์ปดํŒŒ์ผ๋  ๋•Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ JavaScript ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํด๋”๋ฅผ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ

๋ณด๋‹ค ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์šฐ๋Š” ์•„๋ž˜ @vvakame ๋ฐ ๋น„๊ณต๊ฐœ(๋ฐ˜์ค‘๋ณต) #207 ๋ฌธ์ œ์—์„œ ์ œ์•ˆํ•œ http://nodejs.org/api/modules.html#modules_folders_as_modules ์— ๋Œ€ํ•œ Node.js์˜ ์ธ๊ธฐ ์žˆ๋Š” ๊ทœ์น™์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

package.json์˜ typescript.main

TypeScript npm ๋ชจ๋“ˆ์˜ ๊ธฐ๋ณธ .ts ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด package.json ํŒŒ์ผ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ JavaScript / .js ํŒŒ์ผ์ด ์žˆ๋Š” ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ TypeScript ๋Œ€์‹ ์— ์ง€์ •ํ•˜๋Š” main ํ‚ค์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ: node_modules/myModule/package.json ์— ์žˆ๋Š” "myModule"์ด๋ผ๋Š” npm ๋ชจ๋“ˆ์— ๋Œ€ํ•œ package.json

{
     "main": "./dist/index.js",
     "typescript": {
          "main": "./src/index.ts"
     }
}

์ด ์˜ˆ์—์„œ node_modules/myModule/src/index.ts ๋Š” ๊ธฐ๋ณธ TypeScript ํŒŒ์ผ์ด๊ณ  import myModule = require("myModule"); ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด node_modules/myModule/src/index.ts ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

JavaScript ํŒŒ์ผ์— var myModule = require("myModule"); ๋ฅผ ์ž‘์„ฑํ•˜๋Š” JavaScript ์ฝ”๋”์˜ ๊ฒฝ์šฐ require๋Š” ํ‰์†Œ์™€ ๊ฐ™์ด node_modules/myModule/dist/index.js ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด TypeScript src๋Š” node_modules/module-name/src ํด๋”์— ์žˆ๊ณ  ์ปดํŒŒ์ผ๋œ JS ํŒŒ์ผ์€ node_modules/module-name/dist ์— ์žˆ์Šต๋‹ˆ๋‹ค.

TypeScript ์†Œ์Šค๊ฐ€ ์ปดํŒŒ์ผ๋œ JavaScript ์ถœ๋ ฅ๊ณผ ์™„์ „ํžˆ ๋ถ„๋ฆฌ๋˜๋„๋ก TypeScript npm ๋ชจ๋“ˆ์˜ (๋ฐ˜) ํ‘œ์ค€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜ @vvakame ์ด ์ œ์•ˆํ•œ ๋ณด๋‹ค ๊ธฐ๋ณธ์ ์ธ ๊ฒฝ์šฐ๋Š” http://nodejs.org/api/modules.html#modules_folders_as_module ์˜ ์ธ๊ธฐ ์žˆ๋Š” Node.js ๊ทœ์น™์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

package.json์˜ typescript.definition

TypeScript๊ฐ€ ์•„๋‹Œ(์ผ๋ฐ˜ JavaScript) npm ๋ชจ๋“ˆ์— ๋Œ€ํ•œ package.json์˜ ๋˜ ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ํ‚ค๋Š” typescript.definition ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ npm ๋ชจ๋“ˆ์˜ TypeScript ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ๋ชจ๋“ˆ์„ ์ •์˜ํ•˜๋Š” .d.ts ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ
import $ = require('jquery');
jQuery์˜ package.json์—์„œ typescript.definition ํ‚ค์— ์ •์˜๋œ jquery.d.ts ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ฝ๊ณ  $ ๋ฅผ ์˜ฌ๋ฐ”๋ฅธ ์œ ํ˜•์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ์‹œ ํ˜•์‹:

{
     "main": "./dist/index.js",
     "typescript": {
          "definition": "./index.d.ts"
     }
}

(์ด ํ˜•์‹์€ @Bartvds๊ฐ€ ์•„๋ž˜์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ tsd ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ๋Ÿฌ๋ฉด TypeScript ์ฝ”๋”๋Š” .d.ts ํŒŒ์ผ๊ณผ package.json typescript.definition ํ‚ค๊ฐ€ ์žˆ๋Š” pull ์š”์ฒญ์„ ๋ณ‘ํ•ฉํ•˜๊ธฐ ์œ„ํ•ด TypeScript๊ฐ€ ์•„๋‹Œ npm ๋ชจ๋“ˆ ์œ ์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ์ตœ๋Œ€ํ•œ ๋งŽ์ด ํ™•๋ณดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค๋ฉด TypeScript ์ฝ”๋”์˜ ์‚ถ์€ ํ–‰๋ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ... ๋” ์ด์ƒ ํ™•์‹คํžˆ ์œ ํ˜•์ด ์ง€์ •๋œ .d.ts ํŒŒ์ผ์„ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. npm install๋งŒ ํ•˜๋ฉด TypeScript ์ •์˜๋„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ์„ค์น˜๋œ ๋ชจ๋“ˆ ๋ฒ„์ „์— ๋”ฐ๋ผ ์ž๋™์œผ๋กœ ์ตœ์‹  ์ƒํƒœ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

ํ˜œํƒ ๋ชฉ๋ก

์ด ๋ชจ๋“  ๊ฒƒ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์–ป๋Š” ๊ฒƒ์€

  • npm ๋ชจ๋“ˆ์€ TypeScript๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript์™€ JavaScript ์ฝ”๋”๋Š” ๋ชจ๋‘ ์ด ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ ์‚ฌ์šฉ์ž๋Š” ๋ชจ๋“ˆ ์ฝ”๋”(๋˜๋Š” ์‚ฌ์šฉ์ž)๊ฐ€ ๋ณ„๋„์˜ .d.ts ํŒŒ์ผ์„ ์ž‘์„ฑ(๋˜๋Š” ์ƒ์„ฑ)ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด(๋”ฐ๋ผ์„œ ๋ชจ๋“ˆ์˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ TypeScript์— ์žˆ๋Š” ๊ฒฝ์šฐ) ์ •์  ํƒ€์ดํ•‘์˜ ์ด์ ์„ ์–ป์Šต๋‹ˆ๋‹ค. ์œ ์ง€ ๊ด€๋ฆฌํ•  ๋‹ค๋ฅธ .d.ts ํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  • ๋ˆ„๊ตฌ๋‚˜ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” npm์„ ์‚ฌ์šฉํ•˜์—ฌ TypeScript ๋ชจ๋“ˆ์„ ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • TypeScript๋กœ ์ž‘์„ฑ๋œ npm ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” JavaScript ์ฝ”๋”๋Š” TypeScript ์†Œ์Šค๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ข‹์€์ง€/๋” ๋‚˜์€์ง€ ํ™•์ธํ•˜๊ณ  ์ „ํ™˜์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ TypeScript ์‚ฌ์šฉ ์ž์ฒด๋ฅผ ํ™๋ณดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ๋ชจ๋“ˆ์— ๊ธฐ์—ฌํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์†Œ์Šค๊ฐ€ TypeScript์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“ˆ์„ ์ข‹์•„ํ•˜๊ณ  ์ž์‹ ์˜ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์ฝ”๋“œ ๊ณต์œ ๋ฅผ ํ†ตํ•ด TypeScript ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์„ฑ์žฅ์‹œํ‚ค๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ TypeScript ์ฝ”๋“œ๋Š” ๋Œ€๋ถ€๋ถ„ ์ž์‹ ์˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์„ ๊ณต์œ /๋ฐฐํฌ/์žฌ์‚ฌ์šฉํ•˜๋Š” ์ ์ ˆํ•˜๊ณ  ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด ์—†์œผ๋ฉด ์•„๋งˆ๋„ ์–ธ์–ด์˜ ์„ฑ์žฅ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ์•„๋งˆ๋„ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. [1]
  • ๋‚ด๋ถ€ ํ”„๋กœ์ ํŠธ์—์„œ ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•˜๋ฉด ๋ฒˆ๊ฑฐ๋กœ์›€์ด ํ›จ์”ฌ ์ค„์–ด๋“ค๊ณ  .d.ts ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ๋ชจ๋“ˆ์— ํ•„์š”ํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ, ์ผ๋ฐ˜ .d.ts ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. (์ง€๊ธˆ TypeScript ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ../../ s๋ฅผ ์ž˜ ์„ธ๊ธฐ ์œ„ํ•ด ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)
  • ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋˜ํ•œ Browserify/Webpack์ด node_modules ์•„๋ž˜์—๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Browserify/Webpack์„ ์ง€์›ํ•˜๋ฏ€๋กœ ์„œ๋ฒ„์™€ ๋ธŒ๋ผ์šฐ์ € ๋ชจ๋‘์— ์‰ฝ๊ฒŒ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” / npm ๋ถ„์‚ฐ TypeScript ๋ชจ๋“ˆ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • TypeScript๊ฐ€ ์•„๋‹Œ npm ๋ชจ๋“ˆ์€ typescript.definition ํ‚ค ์ถ”๊ฐ€๋ฅผ ํ†ตํ•ด ์œ ํ˜• ์ •๋ณด์™€ ํ•จ๊ป˜ TypeScript์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด .d.ts ์ •์˜ ํŒŒ์ผ์„ npm ๋ชจ๋“ˆ๊ณผ ํ•จ๊ป˜ ํŒจํ‚ค์ง€ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ npm ๋ชจ๋“ˆ์„ ์—…๋ฐ์ดํŠธํ•˜๋ฉด .d.ts ์ •์˜ ํŒŒ์ผ์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด .d.ts ํŒŒ์ผ์„ ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • typescript.definition ๋ฅผ ํ†ตํ•ด ์ •์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ณ„๋„์˜ ///<reference ... ๊ฐ€ ํ•„์š” ์—†๋Š” ๋‹จ์ˆœํžˆ import moduleName = require("moduleName") ๋ฌธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • typescript.definition ๋ฅผ ํ†ตํ•ด ์ •์˜ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉด ์œ ํ˜• ์ด๋ฆ„ ์ถฉ๋Œ ์—†์ด ๋™์ผํ•œ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ธ๋ถ€ ์ œ์•ˆ

@Nemo157 ์€ ์ด ๋ชจ๋“  ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋งค์šฐ ์ƒ์„ธํ•œ ์ œ์•ˆ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ TypeScript์—๋Š” ํ•ด๊ฒฐ ์˜๋ฏธ ์ฒด๊ณ„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
https://gist.github.com/Nemo157/f20064a282ee620f3877

์ œ์•ˆ์— ์ถ”๊ฐ€๋œ ์‚ฌํ•ญ์€ /typings ํด๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ tsd ์™€ ๊ฐ™์€ ๋„๊ตฌ์—์„œ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ •์˜ ํŒŒ์ผ์„ ๋ณด๊ด€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํด๋”๋Š” ์ €์žฅ์†Œ์— ์ •์˜ ํŒŒ์ผ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š” JavaScript npm ๋ชจ๋“ˆ์šฉ์ž…๋‹ˆ๋‹ค. .

์ตœ์ข… ์ง€์› ์‚ฌ์‹ค

TypeScript๋Š” node.js์™€ ๋ธŒ๋ผ์šฐ์ €์˜ ๋‘ ๊ณณ์—์„œ ์ฃผ๋กœ ์‹คํ–‰๋˜๋Š” JavaScript๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— node_modules๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ npm๊ณผ Browserify/Webpack ๋•Œ๋ฌธ์— ๋‘ ๊ณณ ๋ชจ๋‘(TypeScript๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ)์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰. node_modules๊ฐ€ ๋ชจ๋“  TypeScript ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ๋ชจ๋“  JavaScript ์ฝ”๋“œ์˜ 75%-100%์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋‹ค๋ฅธ ์ฒด๊ณ„๋ฅผ ์ƒ๊ฐํ•ด๋‚ผ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. (RequireJS ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ 25%๋ฅผ ๊ฐ€์ ธ๊ฐ‘๋‹ˆ๋‹ค.)

๊ฐ์ฃผ

[1] - BTW Typescript ๋ชจ๋“ˆ(?)์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” Microsoft์˜ NuGet ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž(?)๊ฐ€ ์žˆ์ง€๋งŒ node.js ์ค‘์‹ฌ(.NET ์ค‘์‹ฌ์ด ์•„๋‹˜) ๋ฐฐ๊ฒฝ์—์„œ ์ œ๊ณต๋˜๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ NuGet์ด ํŠนํžˆ npm์ด node.js์˜ _the_ ํ‘œ์ค€์ด๊ณ  ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript์˜ ์ฃผ์š” ํ‘œ์ค€์ด๊ธฐ ๋•Œ๋ฌธ์— Microsoft ์ค‘์‹ฌ ์ƒ์  ์™ธ๋ถ€์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. TypeScript๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด NuGet์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์—†์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ‰๊ท ์ ์ธ node.js/ํด๋ผ์ด์–ธํŠธ ์ธก JavaScript ์ฝ”๋”๋Š” NuGet๊ณผ ๊ฐ™์€ Microsoft ๊ณ ์œ ์˜ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋„๊ตฌ์ธ npm์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์‚ฌ์‹ค NuGet์— ๋Œ€ํ•ด ์•„๋Š” ๊ฒƒ์ด ์—†์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋‚ด์šฉ์€ ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

Committed Suggestion

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

์–ด์จŒ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ˜„์žฌ ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์œ ํ˜• ์ •์˜ ์—†์ด ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์ฃ ?

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

[์œ„ ๋ฌธ์ œ ์„ค๋ช… ์—์„œ package.json์˜ typescript.main์œผ๋กœ ์ด๋™]

:+1:
http://nodejs.org/api/modules.html#modules_folders_as_modules ๋Š” Node.js์˜ ๋งค์šฐ ์ธ๊ธฐ ์žˆ๋Š” ๊ทœ์น™์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์˜ˆ.

./ํ…Œ์ŠคํŠธ/์ธ๋ฑ์Šค.ts

export function hello() { return "Hello, world"; }

./๋ฉ”์ธ.ts

import test = require("./test/");
console.log(test.hello()); // print "Hello, world"

[์œ„ ๋ฌธ์ œ ์„ค๋ช… ์—์„œ package.json์˜ typescript.definition์œผ๋กœ ์ด๋™]

ํ•œ ๊ฐ€์ง€ ํ•ด๊ฒฐ์ฑ…์€ ๋” ๋‚˜์€ ๋„๊ตฌ๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด import foo = require('foo') ๋Š” ๋กœ์ปฌ node_module+package.json(foo๋Š” ts ํ”„๋กœ์ ํŠธ์ž„) ๋˜๋Š” DT ์ •์˜(foo๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž‘์„ฑ์ž๊ฐ€ ts def๋ฅผ ์œ ์ง€ํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š๋Š” js ํ”„๋กœ์ ํŠธ์ž„)๋ฅผ ์ฐพ๋Š” ํžŒํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. .

์ฐธ๊ณ ๋กœ; ์‹ค์ œ๋กœ TSD์—์„œ ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. npm(๋˜๋Š” bower) ํŒจํ‚ค์ง€์— ๋ฒˆ๋“ค๋กœ ์ œ๊ณต๋˜๋Š” ์ •์˜๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

0.6์šฉ ๋‚ด dev ๋ฒ„์ „์— ์žˆ์œผ๋ฉฐ typescript ์š”์†Œ๋ฅผ package.json(๋˜๋Š” bower.json)์— ์ถ”๊ฐ€ํ•˜๊ณ  ํ•˜์œ„ ์š”์†Œ definition ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. source ๋„ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

{
    ...
    "main": "./index.js",
    "typescript": {
        "definition": "./foo.d.ts"
    }
    ...
},

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜„์žฌ tsd link ์ธ TSD์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ node_modules(๋˜๋Š” bower ๋˜๋Š” ๊ธฐํƒ€)์˜ ๋ชจ๋“  package.json ํŒŒ์ผ์„ ์Šค์บ”ํ•˜๊ณ  ์ •์˜๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ์†์„ฑ์„ ์ฐพ๊ณ  ์ค‘์•™ tsd.d.ts ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์—

์˜ˆ: ์—ฌ๊ธฐ ์—์„œ ์ •์˜ํ•˜๊ณ  ์—ฌ๊ธฐ ์—์„œ ์‚ฌ์šฉ

@Bartvds ๊ฝค ๋ฉ‹์ง€๋„ค์š”. npm ํŒจํ‚ค์ง€์— .d.ts๋ฅผ ํฌํ•จํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "typescript"์— "definition"์ด ์žˆ๋Š” package.json ๊ตฌ์กฐ๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ์ฒด๊ณ„์ ์ž…๋‹ˆ๋‹ค.

TypeScript ์ปดํŒŒ์ผ๋Ÿฌ ์ž์ฒด๊ฐ€ ์ž๋™์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋งค์šฐ ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ† ๋ก ์„ ์œ„ํ•ด ์ด๊ฒƒ์„ ํƒœ๊ทธ ์ง€์ • -- ์—ฌ๊ธฐ์—์„œ ๋‹ค์–‘ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋” ๋˜‘๋˜‘ํ•œ ์™ธ๋ถ€ ๋ชจ๋“ˆ ํ•ด๊ฒฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ „์— ์ œ๊ธฐ๋˜์—ˆ์œผ๋ฉฐ 1.0์—์„œ ๋ช‡ ๊ฐ€์ง€ ์กฐ์ •์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ #207์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜์‹ญ์‹œ์˜ค - '์ƒ‰์ธ' ์•„๋ž˜์—์„œ ์‚ดํŽด๋ณด๊ธฐ

:+1:

์„ ์–ธ ์ƒ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ @chanon tsMain ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค, ์ด ๋ฌธ์ œ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ํ”„๋กœ์ ํŠธ์—์„œ browserify/packify๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋…ธ๋“œ ํ˜ธํ™˜ ๋””๋ ‰ํ† ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

:+1:

์ด ์˜์—ญ์—์„œ ์ด๋ฏธ codeplex repo์— ๋ช‡ ๊ฐ€์ง€ ์ž‘์—…์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” leebyron์— ์˜ํ•ด, ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” kayahr ์— ์˜ํ•ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค .

๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒˆ ์ €์žฅ์†Œ์— ์ด์‹ํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ๊ด€๋ จ ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ์žฌ๋ฐฐ์—ด๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” typings ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ๋Š” ๊ฒƒ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ž์ฒด typescript ์ •์˜๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆ๋กœ ์ž‘์—…ํ•  ๋•Œ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ tsd ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๋ชจ๋“  ์ž‘์—…์„ ํˆฌ๋ช…ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด /// <reference d ํŒŒ์ผ์ด ์ฃผ๋ณ€ ์™ธ๋ถ€ ์„ ์–ธ์ด์–ด์•ผ ํ•˜๋ฏ€๋กœ ์•ฝ๊ฐ„์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ธŒ๋žœ์น˜์—์„œ ๊ตฌํ˜„ํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ œ ๋ชจ๋“ˆ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

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

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

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

@joewood ๋˜ํ•œ A์˜ ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ฐ„์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ”œโ”€โ”€ [email protected]
โ””โ”€โ”€ [email protected]
    โ””โ”€โ”€ [email protected]

์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ์œ ํ˜•์ด ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋ฒ„์ „์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ์†”๋ฃจ์…˜์„ ๋“ฃ๊ณ  ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. TypeScript์—๋Š” ์•ฐ๋น„์–ธํŠธ ์„ ์–ธ์— ๋Œ€ํ•œ global ์ˆ˜์ค€ ๋ณ€์ˆ˜ ๋ฒ”์œ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@joewood ๋„ค, ๊ฐ€๋Šฅํ•œ ํ•œ /// reference ๋ฅผ ํ”ผํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ •์˜๋ฅผ ๋กœ๋“œํ•˜๋„๋ก require ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋ชจ๋“ˆ์€ ์•ฐ๋น„์–ธํŠธ ์„ ์–ธ ๋Œ€์‹  ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋กœ ์‹๋ณ„๋˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์™€ ๋‹ค๋ฅธ ๋ฒ„์ „์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ์—ฌ๋Ÿฌ ๊ฐœ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋„ค, ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋ฉด /// ์ฐธ์กฐ๋ฅผ ํ”ผํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ •์˜๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด require๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ˆ˜์ •๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

:+1:

:+1: @Nemo157 ๊ณผ ํ† ๋ก ์— ์ฐธ์—ฌํ•ด์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

package.json ์ถ”๊ฐ€ ์‚ฌํ•ญ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  @Nemo157 ์˜ ์ œ์•ˆ์— ๋งํฌํ•˜๋„๋ก ์ฃผ์š” ๋ฌธ์ œ ํ…์ŠคํŠธ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

:+1:

๋‚˜๋Š” ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๋ชจ๋“  ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ๋ชจ๋“ˆ ์„ธํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ๊ณผ ํ•จ๊ป˜ ๋‚ด ์ œ์•ˆ์˜ ์ดˆ๊ธฐ ๊ตฌํ˜„ ์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋‹ค๋ฅธ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

:+1:

index.ts :+1์ด ์žˆ๋Š” ๋ชจ๋“ˆ๋กœ์„œ์˜ ํด๋”:

:+1:

:+1:

:+1:

:+1:

:+1: :+1: :+1:

:+1: :+1: :+1: :+1:

์ด๊ฒƒ์„ ์šฐ๋ฆฌ ๋ ˆ์ด๋”์— ๋‹ค์‹œ ๋ถ€๋”ชํžˆ๊ธฐ ์œ„ํ•ด ๋…ผํ‰ํ•ฉ๋‹ˆ๋‹ค.

@Bartvds ์˜ ์ œ์•ˆ์œผ๋กœ ์ข‹์€ ์„ฑ๊ณต์„ ๊ฑฐ๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ˜„์žฌ tsd ๋งํฌ์ธ TSD์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ node_modules(๋˜๋Š” bower ๋˜๋Š” ๊ธฐํƒ€)์˜ ๋ชจ๋“  package.json ํŒŒ์ผ์„ ์Šค์บ”ํ•˜๊ณ  ์ •์˜๋œ ๊ฒฝ์šฐ ํ•ด๋‹น ์†์„ฑ์„ ์ฐพ๊ณ  ์ค‘์•™ tsd.d.ts ๋ฒˆ๋“ค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์˜ ํ”„๋กœ์ ํŠธ์—์„œ.

package.json typescript ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

TypeScript๊ฐ€ node.js ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋ ค๋ฉด tsc๊ฐ€ node_modules ํด๋”๋ฅผ ์ธ์‹ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ(npm-workspace ์‚ฌ์šฉ)์˜ ์ผ๋ถ€์ธ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์‹ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํ˜„์žฌ ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ž˜๋ชป๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” node_modules์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ: import Foo = require("node_modules/mymodule/Foo");
  • ์„ ์–ธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋„๋ก tsc๋ฅผ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๋ฌธ์ž์—ด ๋ชจ๋“ˆ ์ด๋ฆ„์„ ์ „ํ™˜ํ•˜๋Š” ์ˆ˜๋™์œผ๋กœ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ๋ชจ๋“ˆ ์„ ์–ธ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

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

:+1: :+1: :+1:

tsc๊ฐ€ ๊ฐ€์ ธ์˜ค๊ธฐ ์„ ์–ธ์—์„œ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„์„ ํ™•์ธํ•œ ๋‹ค์Œ ๊ฒฝ๋กœ ํ™•์ธ ์ค‘์— node.js ๋Ÿฐํƒ€์ž„๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ node_modules๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๊ฒƒ์ด _ํ•ด์•ผ ํ•˜๋Š”_ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด๋ฆ„์„ ๊ฐ€์ง„ ํŒŒ์ผ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋””๋ ‰ํ† ๋ฆฌ ํŠธ๋ฆฌ๋ฅผ ์ฐพ๋Š” ํ˜„์žฌ ๋ฐฉ์‹์€ JS ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์™€ ์œ ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž ์‹œ ๋™์•ˆ ๋‚ด ๋ชฉ๋ก์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด๊ฒƒ์„ ์–ป์œผ๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ( Booktrack )๋Š” ๋ชจ๋“  ์›น ๊ฐœ๋ฐœ์— TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ node.js ๊ฐœ๋ฐœ์ž์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ์ž์˜ ๋ชฉ์†Œ๋ฆฌ๊ฐ€ ๋…ธ๋“œ ๊ฐœ๋ฐœ์ž์˜ ๋ชฉ์†Œ๋ฆฌ๋งŒํผ ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ชฉ์†Œ๋ฆฌ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

์†”๋ฃจ์…˜(์ตœ์•…์—์„œ ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ์ˆœ์„œ):

  1. node_modules ์— ๋Œ€ํ•œ ํ•˜๋“œ ์ฝ”๋”ฉ๋œ ์กฐํšŒ๋ฅผ ํ†ตํ•œ ์ตœ์ƒ์œ„ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„ ํ™•์ธ
  2. ์ตœ์ƒ์œ„ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„ ํ™•์ธ์„ ์ œ์–ดํ•  ์ˆ˜ ์—†์Œ
  3. node_modules ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์ตœ์ƒ์œ„ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„์˜ ์„ ํƒ์  ํ™•์ธ์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์ปดํŒŒ์ผ๋Ÿฌ ํ”Œ๋ž˜๊ทธ
  4. ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ตœ์ƒ์œ„ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„์˜ ์„ ํƒ์  ํ•ด์„์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹์ปดํŒŒ์ผ๋Ÿฌ "๋ชจ๋“ˆ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ" ๋งค๊ฐœ๋ณ€์ˆ˜
  5. ๋ชจ๋“ (์ตœ์ƒ์œ„ ์ˆ˜์ค€์ด ์•„๋‹Œ) ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„์„ ํ•ด์„ํ•˜๋Š” JS ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ์ปดํŒŒ์ผ๋Ÿฌ "๋ชจ๋“ˆ ํ•ด์„๊ธฐ" ๋งค๊ฐœ๋ณ€์ˆ˜
  6. ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„ ํ™•์ธ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ธ์–ด ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ›„ํฌ

์˜ต์…˜ 1์€ ๋”์ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์˜ต์…˜ 2๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ 5์™€ 6์€ requirejs ๋˜๋Š” webpack ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋ฐœ๊ฒฌ๋˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ import ๋ฌธ์„ ์ด๊ตญ์ ์ธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์•„์ด๋””์–ด: ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ชจ๋“  ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„ ์กฐํšŒ(์ตœ์ƒ์œ„ ์ˆ˜์ค€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ)๋ฅผ ์ œ3์ž(ํ”Œ๋Ÿฌ๊ทธ์ธ ๋˜๋Š” ์ฝœ๋ฐฑ)์— ์œ„์ž„ํ•ฉ๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ์ค‘์ธ ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ์™€ ์™ธ๋ถ€ ๋ชจ๋“ˆ ์ด๋ฆ„์ด ์ œ๊ณต๋œ ๋Œ€๋ฆฌ์ž๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ ๋˜๋Š” ์ง€์ •๋œ ๋ชจ๋“ˆ ์ด๋ฆ„์— ๋Œ€ํ•œ ์œ ํ˜• ์ •๋ณด๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ต์…˜ 4๊ฐ€ ๊ตฌํ˜„๋˜๋ฉด ๊ธฐ์˜๊ณ  ์˜ต์…˜ 6์ด ๊ตฌํ˜„๋˜๋ฉด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์˜ต์…˜ 4์™€ ์˜ต์…˜ 6์ด ๋ชจ๋‘ ๊ตฌํ˜„๋˜๋ฉด ๋‹ฌ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“ˆ ๊ฒ€์ƒ‰ ๋ฃจํŠธ์— ๋Œ€ํ•œ --basePath๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋ชจ๋“  ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ํ•ด๋‹น ๊ฒฝ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ AMD์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ ๋ฌธ์ œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. :)

์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ์˜ค๋ž˜์ „์— @Nemo157 ์—์„œ ๊ตฌํ˜„(๋ฐ ํ…Œ์ŠคํŠธ)์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. https://github.com/Microsoft/TypeScript/issues/247#issuecomment -57422329

@mark-buer ๋ฐ @mhegazy ์— ๋™์˜ํ•˜์‹ญ์‹œ์˜ค. ์˜ต์…˜ 4๋Š” ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๊ฐ€ ๊ฐ„๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด ์„œ๋น„์Šค(์˜ต์…˜ 6)์—์„œ ๋ณด๋‹ค ์ •๊ตํ•œ ์†”๋ฃจ์…˜์ด ์žฅ๊ธฐ์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

_์ถ”๊ฐ€ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Œ_: ์ผ๋ฐ˜์ ์ธ ์œ ํ˜• ์ฐธ์กฐ #1125์— ๋Œ€ํ•œ ์ค‘๋ณต ๊ธฐํ˜ธ ๋ฌธ์ œ๋กœ ์ธํ•ด npm์—์„œ TypeScript ์žฌ์‚ฌ์šฉ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ •๋ง๋กœ ํ”ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ///.tsconfig ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  #17์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋‹จ์ผ ์™ธ๋ถ€ ์œ ํ˜• ๋ชจ๋“ˆ๋กœ ๋ฒˆ๋“ค๋งํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

typescript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ node_modules ํด๋”๋ฅผ ์ธ์‹ํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋˜ ๋‹ค๋ฅธ ํˆฌํ‘œ์ž…๋‹ˆ๋‹ค.

CommonJS ๋ชจ๋“ˆ์˜ ๊ฒฝ์šฐ typescript๋Š” ์ด์ƒ์ ์œผ๋กœ require.resolve๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ํŒŒ์ผ ์ด๋ฆ„ ํ™•์ธ์„ ๋”ฐ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ด ํŽ˜์ด์ง€์˜ psuedocode์— ์„ค๋ช…๋œ ๋Œ€๋กœ: http://nodejs.org/api/modules.html#modules_all_together.

์ด ๊ธฐ๋Šฅ์€ typescript ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ browserify์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋…ธ๋“œ ํŒจํ‚ค์ €์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. @Nemo157 ์˜ ํŒจ์น˜๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์ด ์ตœ์‹  ๋ฒ„์ „์˜ typescript๋กœ ์ด๋™ํ•˜๊ณ  ๋” ์ด์ƒ ๊ทธ์˜ ์ฝ”๋“œ์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ํŒจํ‚ค์ €๋กœ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

node_modules ๋””๋ ‰ํ† ๋ฆฌ๋Š” ์†Œ์Šค์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

Atom-TypeScript๋Š” ์ด์ œ typescript.definition ๋ฅผ ์ฆ‰์‹œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์„ธ๋ถ€ ์ •๋ณด : https://github.com/Microsoft/TypeScript/issues/2829

๋˜ํ•œ atom-typescript :rose: ๋‹ค์‹œ #2829๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ์ •

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

์ €๋Š” ์ด ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ œ ๊ณ„ํš์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” TypeScript์— ์™ธ๋ถ€ reference ์ฃผ์„์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” d.ts ๋ฅผ ์ฝ์„ ๋•Œ ๋ช‡ ๊ฐ€์ง€ ๋˜‘๋˜‘ํ•œ ์ผ์„ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์—ฌ๊ธฐ์—์„œ node.d.ts https://github.com/TypeStrong/atom-typescript-examples /blob/master/node/node_modules/example-typescript-b/definition/sample-bdts) ๋Œ€์‹  Typing์— ์žˆ๋Š” ๊ฒฝ์šฐ ์ž์ฒด .d.ts ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

2.0์—์„œ๋„ ๊ณ„์† ์œ ์ง€๋ ๊นŒ์š”? ์ด๊ฒƒ์€ Node.js ์ฑ„ํƒ์„ ์œ„ํ•œ ์ผ์ข…์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ํ™•์‹คํžˆ Typed ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Node.js ์ฑ„ํƒ์„ ์œ„ํ•œ ์ผ์ข…์˜ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ํ™•์‹คํžˆ Typed ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ๊ณ ํ†ต์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@LPGhatguy https://github.com/Microsoft/TypeScript/issues/2338์„ ์ฐธ์กฐํ•˜์„ธ์š”. @vladima ๊ฐ€ ์ž‘์—… ์ค‘์ด์ง€๋งŒ ์•„์ง ์ด์ •ํ‘œ๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค :rose:

@LPGhatguy ์šฐ๋ฆฌ๋Š” ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ด๊ฒƒ์„ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณง.

@mhegazy 1.6์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๊ต‰์žฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

#2338๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

TypeScript 1.6์˜ ๊ฒฝ์šฐ ์˜ˆ(์ ์–ด๋„ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋ ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค), #2338์˜ ๊ฒฝ์šฐ ์˜ˆ; #3147 ๋ฐ #4154๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด ์ฃผ๋ณ€์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ •ํ‘œ๋กœ TypeScript 2.0์œผ๋กœ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@heycalmdown ๋•๋ถ„์— ์ด์ •ํ‘œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ์•ˆ์— ์ด์ •ํ‘œ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ผ์ฃผ์ผ ์ด๋‚ด์— ์ด๋ฃจ์–ด์ง€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ณ„์† ์ง€์ผœ๋ด ์ฃผ์„ธ์š”.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ES6 ๋ชจ๋“ˆ ์ง€์›์„ ์š”์ฒญํ•˜๋ฉด์„œ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค(๋‚ด ์ƒ๊ฐ์—๋Š”?)

์— ๋Œ€ํ•œ ์ž…๋ ฅ

import mylib = require('mylib');
mylib.foo(mylib.bar);

์™€ ๋™์ผํ•˜๊ฒŒ ํ–‰๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค

import { foo, bar } from 'mylib';
foo(bar);

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๊ธฐ ์œ„ํ•ด ES6 ๋ชจ๋“ˆ ์ง€์›์„ ์š”์ฒญํ•˜๋ฉด์„œ ์ฐจ์ž„ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@DavidSouther _ ์ž๋™์œผ๋กœ_ ๊ทธ๋ ‡๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜ ์‚ฌ์ด์˜ ์กฐํšŒ๋Š” ์ผ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ #4154์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์•ผ๊ฐ„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋‚ด์ผ๋ถ€ํ„ฐ ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด "์ •์ƒ์ ์œผ๋กœ ์ž‘๋™"ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์˜๋ฌธ:
ํŒŒ์ผ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
commonJS์˜ "์ƒ‰์ธ" ๋ฐ
AMD์˜ "๋ฉ”์ธ"
์งง์€ ๊ฒฝ๋กœ๋ฅผ ์œ„ํ•ด.
๋งจ ์œ„์— ์žˆ๋Š” ์งˆ๋ฌธ์—์„œ ์ž‘์„ฑ์ž๊ฐ€ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
/node_modules/concator/index.ts
import concator = require('concator');

์ €๋ฅผ ์šฉ์„œํ•ด ์ฃผ์‹ญ์‹œ์˜ค. ํ˜„์žฌ ์ธ๋ฑ์Šค ํ•ด์ƒ๋„๋„ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ AMD์˜ index.ts ๋˜๋Š” main.ts์— ๋Œ€ํ•œ ํ•ด์ƒ๋„๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?
๋‚˜๋Š” ๋˜ํ•œ @basarat ์— ํ•‘์„ ๋ณด๋‚ด ๊ทธ๊ฒƒ์ด https://github.com/TypeStrong/atom-typescript ์—์„œ ์ง€์›๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด์ œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ index.ts๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@sebilasse , ์˜ค๋Š˜ typescript@next ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ --module commonjs ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

import concator = require('concator'); // resolves to node_modules/concator/index.ts

์ด์ „ ๋ฆด๋ฆฌ์Šค์—์„œ AMD ํ•ด์ƒ๋„๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@DavidSouther ์˜ค๋Š˜ typescript@next ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋„ํ•ด ๋ณด๊ณ  ์š”๊ธˆ์ด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์„ธ์š”.

@mhegazy @basarat :+1: ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ main.ts ๋˜๋Š” index.ts์— ๋Œ€ํ•œ AMD ํ•ด์ƒ๋„์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๋ฏธ๋ž˜์— ์ผ๊ด€๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ์š”?

@sebilasse , AMD์˜ ๊ฒฝ์šฐ #2338(์„น์…˜: RequireJS/ES6 ๋ชจ๋“ˆ ๋กœ๋”)์—์„œ @vladima ๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„์ฃผ ์ข‹์•„์š”!! \์˜ํ˜•/

@mhegazy ์—ฌ์ „ํžˆ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด "์ด์ƒ์ ์ธ" ์‚ฌ์šฉ ์‚ฌ๋ก€์™€ ํ•จ๊ป˜ https://github.com/DavidSouther/typescript-example-using-node ๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. tslib๋Š” ๋‹จ์ผ ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. tsclient๋Š” tslib์™€ Node ํŒจํ‚ค์ง€์˜ readline ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์„ค์ • ์Šคํฌ๋ฆฝํŠธ๋Š” ์„ค์น˜, ์—ฐ๊ฒฐ ๋ฐ ์‹คํ–‰์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‹คํ–‰์„ ํฌํ•จํ•˜๊ณ  ์ธ๋ผ์ธ ์ฃผ์„์œผ๋กœ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ถ€๋ถ„์— ์ฃผ์„์„ ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

% ./setup
...
> [email protected] build ~/ts-node/tslib
> tsc --version ; tsc -p src/

message TS6029: Version 1.7.0-dev.20150831
...
> [email protected] build /Users/southerd/devel/tmp/ts-node/tsclient
> tsc --version ; tsc -p src/

message TS6029: Version 1.7.0-dev.20150831
# Expect this to find tslib, but fail type checking.
# See tsclient/app.ts for details
src/app.ts(4,21): error TS2307: Cannot find module 'tslib'.

+ node ./dist/app.js # This works as expected!
What would you ask? What is the meaning of life?
42
+ set +x

๋˜ํ•œ tsclient(VSCode ๋ฒ„์ „ 0.7.0(0.7.0))์—์„œ tslib ๊ฐ€์ ธ์˜ค๊ธฐ์— ๋Œ€ํ•œ ์–ธ์–ด ์ง€์›์„ ๋ฐ›์ง€ ๋ชปํ•˜์ง€๋งŒ ์–ด๋–ค TSC๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๋˜๋Š” ์ด๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์™„์ „ํžˆ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@DavidSouther TypeScript ์ปดํŒŒ์ผ๋Ÿฌ๋Š” package.json์˜ 'typings' ํ•„๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ '.d.ts' ํŒŒ์ผ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ ์œผ๋กœ ํ•ฉ๋ฒ•์ ์ธ ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ๋ณด์ด๋Š” src/app.ts(13,7): error TS2322: Type 'string' is not assignable to type 'number'. ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์•„, ๊ทธ ๋ฌธ์„œ๋ฅผ ๋†“์ณค๋‚˜ ๋ด…๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ๋‘ ๋ฒˆ์งธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. VSCode tsc ๋ฒ„์ „์„ ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๊นŒ?

"typescript.tsdk" ์„ค์ •์„ ํ†ตํ•ด VSCode์— ๋งž์ถคํ˜• TypeScript SDK ์œ„์น˜๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. tsserver.js ๋ฐ ํ‘œ์ค€ '.d.ts' ํŒŒ์ผ์ด ํฌํ•จ๋œ ํด๋”๋ฅผ ๊ฐ€๋ฆฌ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. TypeScript๊ฐ€ npm ํŒจํ‚ค์ง€๋กœ ์„ค์น˜๋œ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// Place your settings in this file to overwrite the default settings
{   
    "typescript.tsdk": "C:\\Sources\\bugs\\node\\typescript-example-using-node\\tslib\\node_modules\\typescript\\lib"       
}

์ƒ˜ํ”Œ์ด ์ž‘๋™ํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋†€๋ ค๊ณ  ์˜คํ›„ ๋‚ด๋‚ด ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ, ๋‚˜๋Š” ํ•ญ์ƒ ๊ฒฐ๊ตญ

error TS2307: Cannot find module

ํ˜„์žฌ ์ฝ”๋“œ๋Š” node_modules/my-module/์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” index.ts๋ฅผ ์ •์˜ํ•˜๊ณ  typescript.main ์•„๋ž˜์˜ package.json์—์„œ ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์†Œ๋น„์ž ํ”„๋กœ์ ํŠธ์—์„œ 'my-module'์—์„œ {AClass} ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  import my-module = require('my-module'); ๋‘˜ ๋‹ค typescript 1.7.0-dev.20150901์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

--module commonjs ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋Œ€์ ์ด์ง€ ์•Š์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ชจ๋“ˆ์„ ํ™•์ธํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” node_modules\name\index.d.ts ์˜ ์ด๋ฆ„๊ณผ ์ผ์น˜ํ•˜๋Š” .d.ts ๋ฅผ ์ฐพ๊ฑฐ๋‚˜ package.json ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. typings ์†์„ฑ์— ๋Œ€ํ•ด ๊ฐ€๋ฆฌํ‚ค๋Š” .d.ts๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

์„ค๋ช…์—์„œ index.ts ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ ์ข…์†์„ฑ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ์ž…๋ ฅ ๋‚ด์šฉ์„ ์†Œ๋น„ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋ฏ€๋กœ ๋Œ€์‹  index.d.ts ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋“œ ๋ชจ๋“ˆ ํ™•์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋‹จ๊ณ„๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/Microsoft/TypeScript/issues/2338

@DavidSouther ๋ถ„๋ช…ํžˆ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. node_modules์—์„œ ์˜์กด์„ฑ์œผ๋กœ ์ปดํŒŒ์ผํ•˜๋ฉด ๋ชจ๋“ˆ์„ ํ•ด๊ฒฐํ•  ์ˆ˜์—†๊ณ  ์˜ค๋ฅ˜๊ฐ€ ์ถœ๋ ฅ๋˜์ง€๋งŒ ์—ฌ์ „ํžˆ js๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋ชจ๋ฅด๋Š” ์„ค์ • ๋•Œ๋ฌธ์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด d.ts๋Š” ๋Œ€๋ถ€๋ถ„ ๋น„์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŽ์€ .ts ํŒŒ์ผ์— ์ •์˜๋œ ๋‚ด ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๋Š” ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” index.ts๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด d.ts ํŒŒ์ผ์€ ์ด index.ts๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด index.ts์—์„œ ๋ชจ๋“  ๊ฒƒ์„ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

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

declare module 'my_module' {
    export * from 'index';
}

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

ํŽธ์ง‘: ์ž‘๋™ํ•˜๊ฒŒ ๋˜์—ˆ์ง€๋งŒ ๋งค์šฐ ํ•ดํ‚คํ•˜๊ณ  ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. dts-generator๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ d.ts๋ฅผ ๋งŒ๋“  ๋‹ค์Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

import MyClass from '../../node_modules/my_module/dist/MyClass';

'my_module/MyClass'์—์„œ MyClass ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฅ˜ ์—†์ด ์ปดํŒŒ์ผ๋˜์ง€๋งŒ ๋Ÿฐํƒ€์ž„์— 'my_module/MyClass' ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋œ .js๋ฅผ ์ง์ ‘ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋Š” ์˜ค๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•˜๋”๋ผ๋„ ๋Ÿฐํƒ€์ž„์— ์–ด๋–ป๊ฒŒ๋“  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: npm install angular2, import { Inject, Binding } from 'angular2/di' . ์˜ค๋Š˜ ๋ฐค ํฌํ•จ๋œ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

angular๊ฐ€ ์ด๋ฏธ TypeScript ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์˜ˆ์ƒํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํƒ€์ดํ•‘์„ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ผ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๋“ค๊ณผ ํ•จ๊ป˜ ์ผํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์–ด๋””์—์„œ ๋๋‚˜๋Š”์ง€ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ typescript 1.1์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: https://github.com/Nemo157/typescript_w_node_modules_example ).

ํ•˜์ง€๋งŒ typescript 1.5.3์—์„œ ์‹คํŒจํ–ˆ๋Š”๋ฐ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

1.6์— ์ถœ์‹œ๋˜๋Š”๊ฑธ๋กœ ์•Œ๊ณ ์žˆ์Šต๋‹ˆ๋‹ค ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

1.6.2์—์„œ๋งŒ ์ด "๋ฐ˜์ž‘์šฉ"์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € dist ๋””๋ ‰ํ† ๋ฆฌ์— my-lib.d.ts ๊ฐ€ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๊ณ  package.json ํŒŒ์ผ typings ์†์„ฑ(์˜ˆ: "typings" : "dist/my-lib.d.ts" )

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ Test.ts TypeScript ํŒŒ์ผ์—์„œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

import { MyObject } from "my-lib"

MyObject ๊ฐ€ ์ œ๋Œ€๋กœ ์ž„ํฌํŠธ๋˜๊ณ  js ์ฝ”๋“œ๊ฐ€ ํŠธ๋žœ์ŠคํŒŒ์ผ ์‹œ ๋ฐฉ์ถœ๋ฉ๋‹ˆ๋‹ค.
Visual Studio Code๋Š” MyObject ์—์„œ๋„ ์™„์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
Test.ts(10,60): error TS2306: File '[]/node_modules/my-lib/dist/my-lib.d.ts' is not a module.

Visual Studio Code๋Š” ์‹ค์ œ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ•˜๋“œ ์˜ค๋ฅ˜๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

๋…ธ๋“œ ํŒจํ‚ค์ง€์—์„œ ๊ฐ€์ ธ์˜จ ๋ชจ๋“ˆ์€ "์ฃผ๋ณ€ ๋ชจ๋“ˆ ์„ ์–ธ"์ด ์•„๋‹ˆ๋ผ "์™ธ๋ถ€ ๋ชจ๋“ˆ"์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, declare module "foo" {.. } ์„ ์–ธ์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ์˜ ์ตœ์ƒ์œ„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋˜๋Š” ๋‚ด๋ณด๋‚ด๊ธฐ ์„ ์–ธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ "my-lib" ํŒจํ‚ค์ง€๊ฐ€ typescript๋กœ ์ž‘์„ฑ๋˜์—ˆ๋‹ค๋ฉด --declarations ๋กœ ๋นŒ๋“œํ•˜๊ณ  ํƒ€์ดํ•‘์„ ๋ฉ”์ธ ๋ชจ๋“ˆ์˜ .d.ts ํŒŒ์ผ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ ‡์ง€ ์•Š๊ณ  ํƒ€์ดํ•‘์ด ์ง์ ‘ ์ž‘์„ฑํ–ˆ๊ฑฐ๋‚˜ ํ™•์‹คํžˆ ํƒ€์ดํ•‘ํ•œ ๊ฒƒ์ด๋ผ๋ฉด ์™ธ๋ถ€ ๋ชจ๋“ˆ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ #4665๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ณง).

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

๋‹ค์Œ์€ ํ–ฅํ›„ ๊ฒ€์ƒ‰์„ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค. https://github.com/Microsoft/TypeScript/wiki/Typepings-for-npm-packages

@mhegazy Javascript์™€ TypeScript ์ฝ”๋“œ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Typescript๋กœ ์ž‘์„ฑ๋œ commonjs ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋นŒ๋“œ๋ฅผ ์ž๋™ํ™”ํ•˜๋ ค๋Š” ์ €์˜ ํƒ๊ตฌ์— ์ •๋ง ๋„์›€์ด ๋œ ๋น ๋ฅธ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
import/export ๊ตฌ๋ฌธ ๋ฐ ํ•ด์ƒ๋„๋Š” ์ตœ๊ทผ์— ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•˜์—ฌ ์ง€๊ธˆ ๋‹น์žฅ์€ ๋ˆ„๋ฝ๋œ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋˜๋Š” ๊ฒƒ์ด ๋นŒ๋“œ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒฐ์ •์ ์ธ ๊ฐ€์ด๋“œ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™ ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค ... ํ•œ ๊ฐ€์ง€์ฃผ์˜ ์‚ฌํ•ญ (๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ์งˆ๋ฌธ)

๋‹ค์Œ์€ ์„ค์ •์˜ ๋‹จ์ˆœํ™”๋œ ๋ณด๊ธฐ์ž…๋‹ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” 2๊ฐœ์˜ typescript ํŒŒ์ผ A.ts ๋ฐ B.ts์— ์žˆ๋Š” 3๊ฐœ์˜ ๊ฐ์ฒด A1, A2 ๋ฐ B๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ญ”๊ฐ€

์ถœ์ฒ˜

A.ts

class A1{}
class A2{}
export { A1, A2 }

B.ts

class B{}
export { B }

๋…ธ์ถœํ•˜๋ ค๋Š” ๊ฒƒ์€ index.ts ์— ์ˆ˜์ง‘๋ฉ๋‹ˆ๋‹ค.

export * from './A'
export * from './B'

์ง“๋‹ค
๋นŒ๋“œ๋Š” grunt์˜ ๋„์›€์œผ๋กœ ์ˆ˜ํ–‰๋˜๋ฉฐ --module commonjs ๋ฐ --declaration ํ”Œ๋ž˜๊ทธ๊ฐ€ tsc ์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. 1.6.2
๋นŒ๋“œ์˜ ์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.

    package.json
    dist/
        js/
             A.js
             B.js
             index.js
        typings/
             A.d.ts
             B.d.ts
             index.d.ts

package.json ์—๋Š” ๋‹ค์Œ ๋‘ ํ•ญ๋ชฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

"main": "dist/js/index.js",
"typings": "dist/typings/index.d.ts"

TypeScript 1.6.2์—์„œ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ„๋‹จํ•œ import {A1, A2, B} from "mylib" ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์ ˆ๋Œ€์ ์œผ๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ ๋ ˆ๋ฒจ ์ข…์†์„ฑ(์ฆ‰, ์„œ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ TypeScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ _์•„๋‹Œ_ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•  ๋•Œ์ž…๋‹ˆ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Node.js์— ์˜์กดํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์†Œ์Šค ํŒŒ์ผ ์ค‘ ํ•˜๋‚˜์—๋Š” NodeJS ์ž…๋ ฅ์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
///<reference path="../typings/node/node.d.ts"/>

๋ณ€ํ™˜ ์‹œ <reference > ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ์„ ์–ธ ํŒŒ์ผ์—์„œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” node.d.ts ์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด์— ๋Œ€ํ•ด ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

_์ฐธ๊ณ _: index.ts ์—๋Š” <reference > ๋ช…๋ น์–ด๋ฅผ ํฌํ•จํ•  ์ด์œ ๊ฐ€ ์—†๊ณ  1.6์—์„œ๋Š” index.ts ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์„ ๋…ธ์ถœํ•˜๋ฉด ์ด ๋ฌธ์ œ๊ฐ€ ์™„ํ™”๋ฉ๋‹ˆ๋‹ค. .2, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” Adts๊ฐ€ ์ฐธ์กฐ ๋ช…๋ น์–ด์— ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@bgrieder tsconfig.json ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Phosphor์—์„œ ์ด๊ฒƒ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
https://github.com/phosphorjs/phosphor-widget/blob/master/src/tsconfig.json

์ปดํŒŒ์ผ๋œ ํŒŒ์ผ์— ํ•„์š”ํ•œ ์™ธ๋ถ€ ์ž…๋ ฅ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์™ธ๋ถ€ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜๋ผ๋„ ๊ณต๊ฐœ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ์ฝ”๋“œ ์†Œ๋น„์ž๊ฐ€ ๋นŒ๋“œ์˜ ์ผ๋ถ€๋กœ ์ด๋Ÿฌํ•œ ์™ธ๋ถ€ ์œ ํ˜•์„ ์ œ๊ณตํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. _๊ดœ์ฐฎ์•„์š”_. ์ด๋Ÿฌํ•œ ์ •์˜๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•˜๊ณ  ์†Œ๋น„์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ lib๊ฐ€ ๋™์ผํ•œ ์ •์˜๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•œ๋‹ค๋ฉด ์ค‘๋ณต ๊ธฐํ˜ธ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@sccolbert ๋„ค!
<reference ...> ๋ช…๋ น์„ ์ œ๊ฑฐํ•˜๋ฉด ๋ชจ๋“  IDE์—์„œ ์ž๋™ ์™„์„ฑ์ด ์ค‘๋‹จ๋ ๊นŒ ๊ฑฑ์ •ํ–ˆ์ง€๋งŒ ์•„๋‹ˆ์š”. ์ตœ์†Œํ•œ Visual Studio Code 0.8.0์€ tsconfig.json ์—์„œ ํ•ด๋‹น ์ •์˜๋ฅผ ์„ ํƒํ•  ๋งŒํผ ๋˜‘๋˜‘ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

reference ๋กœ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ›Œ๋ฅญํ•œ !

@sccolbert

๊ทธ ์•ˆ์— ์ผ๋ฐ˜ Node.js ํ”„๋กœ์ ํŠธ์™€ *.d.ts๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ tsconfig ์†”๋ฃจ์…˜์ด ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋ฉ๋‹ˆ๊นŒ?

@heycalmdown $# tsconfig ์˜ files ํ•„๋“œ์— d.ts ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/phosphorjs/phosphor-widget/blob/master/test/src/tsconfig.json#L11
https://github.com/phosphorjs/phosphor-widget/blob/master/test/src/index.ts#L10

์—ฌ๊ธฐ์„œ import ๋Œ€์‹  require ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์„ธ์š”. ๋‹จ์ง€ expect.js์šฉ d.ts ํŒŒ์ผ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ๋ฐฉ์‹ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ์ผ์ข…์˜ ์ข‹์€ ์˜ˆ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด TypeScript 1.6.2์—์„œ ์‹ค์ œ๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋งํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?:
https://github.com/chanon/typescript_module_example

์•„๋งˆ๋„ es6 ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2015๋…„ 11์›” 4์ผ ์ˆ˜์š”์ผ ์˜ค์ „ 6์‹œ 10๋ถ„์— chanon [email protected] ์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด TypeScript 1.6.2์—์„œ ์‹ค์ œ๋กœ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ˆ„๊ตฐ๊ฐ€ ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ฌด์—‡์„ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋งํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?:
https://github.com/chanon/typescript_module_example

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/Microsoft/TypeScript/issues/247#issuecomment -153688004
.

๋ฐฉ๊ธˆ es6 ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ–ˆ๋Š”๋ฐ ์—ฌ์ „ํžˆ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ).

$ node_modules package.json d.ts ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” typings ํ‚ค๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ $ typescript ํ‚ค๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์ด _์•„๋‹Œ .ts ํŒŒ์ผ์„ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” PhosphorJS์—์„œ ๋…์ ์ ์œผ๋กœ(TS 1.6.2์—์„œ) ๋…ธ๋“œ ๋ชจ๋“ˆ ํ™•์ธ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. https://github.com/phosphorjs/phosphor-widget/blob/f908341cb1d46ada8ad8149e695a75e7ea2fde57/package.json#L6

@sccolbert ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฌธ์ œ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ์ œ ์ดˆ๊ธฐ ์ œ์•ˆ์€ ์ž‘์„ฑ๋œ ๋…ธ๋“œ ๋ชจ๋“ˆ ํŒจํ‚ค์ง€์˜ ๊ธฐ๋ณธ TypeScript ์ง„์ž…์ ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” typescript.main ์†์„ฑ์„ package.json ์— ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด d.ts ํƒ€์ดํ•‘ ํŒŒ์ผ ์—†์ด TypeScript ์ฝ”๋“œ์—์„œ TypeScript ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ƒ์„ฑํ•  ํ•„์š”๋„ ์—†์Œ).

@chanon ์ €๋Š” ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์—‡์„ ํ•ด์•ผ ํ•˜๋Š”์ง€ ์ง€์ ํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค.

@sccolbert ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์•„๋Š” ์‚ฌ๋žŒ์ด ์ด ํŠน์ • ๊ธฐ๋Šฅ์„ ์š”์ฒญํ•˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“ˆ ํ•ด๊ฒฐ ๋กœ์ง๊ณผ ๊ด€๋ จ๋œ ์ฃผ์š” ๋ฌธ์ œ๋Š” ํ์‡„๋œ #2338๊ณผ ๋งค์šฐ ๋ณต์žกํ•ด ๋ณด์ด๋Š” SystemJS ์Šคํƒ€์ผ ๊ฒฝ๋กœ ํ•ด๊ฒฐ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋Š” #5039์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด๋ฒˆ ํ˜ธ์—์„œ ์ฒ˜์Œ ์š”์ฒญํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•œ CommonJS ์Šคํƒ€์ผ ์ž„ํฌํŠธ๊ฐ€ ์žŠํ˜€์ง„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๊นŒ? ์ ์–ด๋„ typescript.main๊ณผ ํด๋”์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ๋ชจ๋“ˆ๋กœ?

๋ชจ๋“ˆ๊ณผ ๋ชจ๋“ˆ ์†Œ๋น„์ž๊ฐ€ ์ด๋ฏธ TypeScript๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ์šฐ d.ts ํŒŒ์ผ์ด ํ•„์š”ํ•˜๊ณ  ๊ฐ–๊ณ  ์‹ถ์–ดํ•˜๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ƒ๋Œ€์ ์œผ๋กœ ex.TypeScript ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค .

๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹ :
import * as lib from '../relative/path/to/typescriptFile.ts'

๋˜๋Š”:
import * as lib from '../../node_modules/myModule/index.ts'

TSC๊ฐ€ ์ผ๋ฐ˜ node_modules ๊ฒฝ๋กœ ํ™•์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ typescript ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ์ตœ์†Œํ•œ ํด๋”๋ฅผ ๋ชจ๋“ˆ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก(index.ts ํฌํ•จ) ๋‘ ๋ฒˆ์งธ ์˜ˆ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import * as lib from 'myModule'

์•„๋‹ˆ๋ฉด "๋‹น์‹ ์€ ์ •๋ง๋กœ ๋‹น์‹ ์˜ ์˜์กด์„ฑ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์‹ถ์ง€ ์•Š๊ณ , ๋‹น์‹ ์€ ๋‹จ์ง€ ๊ทธ๋“ค์˜ ํƒ€์ดํ•‘์„ ์†Œ๋น„ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค" ๋•Œ๋ฌธ์ž…๋‹ˆ๊นŒ?

@chanon ๋‹น์‹ ์ด ์„ค๋ช…ํ•˜๋Š” ํ–‰๋™์€ ์ง€๊ธˆ ๋งˆ์Šคํ„ฐ์— ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. typescript@next ์‹œ๋„ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

#2338์˜ ์›๋ž˜ ๊ตฌํ˜„์€ .d.ts์ธ์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์œผ๋ฉฐ ์ด๋Š” ์ฃผ๋กœ ๊ท€ํ•˜๊ฐ€ ์–ธ๊ธ‰ํ•œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชจ๋“  ์ปดํŒŒ์ผ๋Ÿฌ ํ˜ธ์ถœ์—์„œ "์†Œ์Šค"๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ ์˜ต์…˜์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ถœ๋ ฅ์„ ์–ป๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š๊ณ  ์ž…๋ ฅ๋งŒ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‘ ํŒจํ‚ค์ง€๋ฅผ ๋ชจ๋‘ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•˜๋Š” ๋™์•ˆ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œํ•œ์€ #5278์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ npm ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•œ ํƒ€์ดํ•‘ ๊ณต์œ ์— ๋Œ€ํ•œ ์œ„ํ‚ค ํŽ˜์ด์ง€๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. https://github.com/Microsoft/TypeScript/wiki/Typings-for-npm-packages

@mhegazy์— ๋Œ€ํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@mhegazy ๋ฐฉ๊ธˆ typescript@next ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!

๋Œ€๋‹จํ•˜๋‹ค!!

๊ทธ๋ฆฌ๊ณ  ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ ๋ฌธ์ œ์— ์ฐธ์—ฌํ•ด ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค :+1:

์ด ๊ธฐ๋Šฅ์ด ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๋ฐฉ์‹์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์œ„์˜ ๋ฌธ์ œ ํ…์ŠคํŠธ์— ์—…๋ฐ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๋ขฐ๋ฐญ์— ๋“ค์–ด๊ฐˆ ์œ„ํ—˜์ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ package.json์— typings ์†์„ฑ์ด _์—†๋Š”_ ํ‰๋ฒ”ํ•œ npm ๋ชจ๋“ˆ์—์„œ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ๊นŒ์š”? typescript@next tape ๋˜๋Š” get-parameter-names ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํŒจํ‚ค์ง€๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค ๋•Œ๋ฌธ์— ํ•ด๋‹น ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด ์–ผ๊ตด์— ํญ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์žฌ์‚ฐ.

๋ฌผ๋ก , ๊ทธ๊ฒƒ๋“ค์€ typescript ๋ชจ๋“ˆ์ด ์•„๋‹ˆ์ง€๋งŒ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™๊ณ  npm ์ƒํƒœ๊ณ„์˜ ์ƒ๋‹น ๋ถ€๋ถ„์„ ์ž ๊ธ‰๋‹ˆ๋‹ค.

@danpantry ์ผ๋ฐ˜์ ์œผ๋กœ ํ•ด๋‹น ๋ชจ๋“ˆ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ž‘์„ฑ๋œ ์ผ๋ฐ˜ .d.ts ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆTyped ํ”„๋กœ์ ํŠธ์—๋Š” ๋งŽ์€ ๊ณตํ†ต ๋ชจ๋“ˆ์— ๋Œ€ํ•œ .d.ts ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ Typed์—์„œ .d.ts ํŒŒ์ผ์„ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” tsd ์œ ํ‹ธ๋ฆฌํ‹ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ commonjs require ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ  ์ผ๋ฐ˜ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ
var ๋ชจ๋“ˆ ์ด๋ฆ„ = ํ•„์š”("๋ชจ๋“ˆ ์ด๋ฆ„")

@chanon ์€ TypeScript์™€ ํ•จ๊ป˜ ES6 ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ๋•Œ JavaScript ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก 'ํด๋ž˜์‹' require ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ํ•ดํ‚น์ฒ˜๋Ÿผ ๋Š๊ปด์ง€์ง€๋งŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. tsd ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ๋Œ€ํ•ด ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ชจ๋“ˆ์— /// <reference path=... ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๊ฒƒ์ด ES6 ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์–ด๋–ป๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋„ค, ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ tsconfig.json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฃจํŠธ tsd.d.ts ํŒŒ์ผ์„ ์ฒซ ๋ฒˆ์งธ ํŒŒ์ผ๋กœ ๋‘๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

tsd ๋ฐ ํƒ€์ดํ•‘ https://angularclass.com/the-state-of-typescript-packages/ ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด๊ฒƒ์„ ์ฝ๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@joewood ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ typescript๋ฅผ ์กฐ์‚ฌํ•œ ๊ฒƒ์€ ๊ฐœ๋ณ„ .d.ts ํŒŒ์ผ ์‹œ๋Œ€์˜€์Šต๋‹ˆ๋‹ค. ์šฐ์ˆ˜ํ•œ ๊ธฐ์‚ฌ

@chanon @danpantry foo์˜ package.json์— ํƒ€์ดํ•‘์ด ์—†์„ ๋•Œ import foo = require('foo') (node_modules ์•„๋ž˜์— foo ํฌํ•จ)์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

@wmono ๊ธ€์Ž„์š”. TypeScript 0.80 ๋˜๋Š” ์ด์ „ import foo = require('foo') ๊ตฌ๋ฌธ์€ ํƒ€์ดํ•‘์ด ์žˆ๋Š” ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ์œผ๋‹ˆ๊นŒ์š”. ํƒ€์ดํ•‘์ด ์—†์œผ๋ฉด ๋Œ€์‹  var foo = require('foo') ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ๋‹ค.

@chanon ์‹ค๋ก€ํ•ฉ๋‹ˆ๋‹ค; ์‚ฌ์šฉ์ž ์˜ค๋ฅ˜. webpack์ด "๋ฒŒ๊ฑฐ๋ฒ—์€" require ๋กœ ๊ณ ๊ตฐ๋ถ„ํˆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์ง€๋งŒ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ ๊ณณ์— ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค
var foo = require('foo');
ํƒ€์ดํ•‘ ์—†์ด ํ‘œ์ค€ node_module์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ
import foo from 'foo';
๊ทธ๋ ‡์ง€ ์•Š์•„? ๊ทธ๋ƒฅ ์ž„์˜๋กœ ์ •์˜ํ•œ๊ฑด๊ฐ€์š”? ํ›„์ž๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ž…๋ ฅ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด์œ ๋ฅผ ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค
var foo = require('foo');
ํƒ€์ดํ•‘ ์—†์ด ํ‘œ์ค€ node_module์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ
'foo'์—์„œ foo๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์•„? ๊ทธ๋ƒฅ ์ž„์˜๋กœ ์ •์˜ํ•œ๊ฑด๊ฐ€์š”? ํ›„์ž๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ž…๋ ฅ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@harangue ๋Š” var require ๊ฐ€ _์œ ํ˜• ๊ฒ€์‚ฌ ์‹œ์Šคํ…œ ์™ธ๋ถ€์—์„œ_ ์ง€์›๋˜๋Š” ๊ฒฝ์Ÿ ๋ชจ๋“ˆ ๊ตฌ๋ฌธ ์ค‘ ํ•˜๋‚˜์˜€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(์ด ๊ตฌ๋ฌธ์€ commonjs ์ด๊ณ  ๋ชฉ๋ก์— ์žˆ๋Š” ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์€ amd ํฌํ•จ). ์œ ํ˜• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด import require ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ES6์—์„œ :hammer:๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ•˜๋‚˜์˜ ๊ตฌ๋ฌธ(:ring:)์ด ๋ชจ๋“  ๊ฒƒ์„ ์ง€๋ฐฐํ•œ๋‹ค๊ณ  ๋งํ•˜๋ฉด ... ์ƒ์ž์—์„œ ๊บผ๋‚ด๋Š” ํ˜•์‹ ๊ฒ€์‚ฌ ์‹œ์Šคํ…œ์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

@basarat ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•„์ด์ฝ˜๋„ ์œ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ;) ES6 ๊ตฌ๋ฌธ์ด ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์š”๊ตฌํ•˜๋Š” ์ด์œ ๋Š” ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ "์˜ค, ํ•ด๋‹น ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์œ ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ ์–ด์จŒ๋“  ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด(์˜คํžˆ๋ ค ์ง๊ด€์ ์ธ IMO) ํ–‰๋™์€ ์–ด๋–ค ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ค๋‚˜์š”?

์ด๊ฒƒ์€ ES6์—์„œ TypeScript๋กœ ๋„˜์–ด๊ฐ€๋Š” ์‚ฌ๋žŒ๋“ค(์ €์™€ ๊ฐ™์€)์—๊ฒŒ๋Š” ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ES6 ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ์ด TypeScript์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜์ง€๋งŒ ์•ˆํƒ€๊น๊ฒŒ๋„ ๋Œ€๋ถ€๋ถ„์˜ npm ํŒจํ‚ค์ง€์—์„œ๋Š” ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ npm ํŒจํ‚ค์ง€์—์„œ๋Š” ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค...

@teohhanhui ํ—ท๊ฐˆ๋ฆฝ๋‹ˆ๋‹ค. ๋‹ฌ์„ฑํ•˜๋ ค๋Š” ๊ฒƒ๊ณผ ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๋„ํ•œ ์ฝ”๋“œ์— ๋Œ€ํ•œ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋‹น์‹ ์„ ๋„์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค :์žฅ๋ฏธ:

import koa from 'koa';

target ๊ฐ€ es6 ์ผ ๋•Œ $ Cannot find module 'koa'. (2307) ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

koa ๋Š” (๋ฌผ๋ก ) node_modules ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ koa๋Š” ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ Typescript ํƒ€์ดํ•‘์„ ๊ฒŒ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ”„๋กœ์ ํŠธ์™€ ํ•จ๊ป˜ .d.ts๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ  package.json์— ๋‚˜์—ดํ•˜๋Š” ํŒจํ‚ค์ง€์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. koa๋Š” ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฏ€๋กœ ํ™•์‹คํžˆ ์œ ํ˜• ์ง€์ •์—์„œ ํ•ด๋‹น ์œ ํ˜• ์ •์˜๋ฅผ ์ถ”๊ฐ€๋กœ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

import ๋ฌธ์ด ์ผ๋ฐ˜ ES6 ๋ชจ๋“ˆ์—์„œ์™€ ๊ฐ™์ด ์ž‘๋™ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ์ž˜๋ชป๋œ ๊ฒฐ์ •์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. (์˜ˆ, ๋Œ€๋ถ€๋ถ„์˜ npm ํŒจํ‚ค์ง€๋Š” CommonJS ๋ชจ๋“ˆ์ด์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ์ „ํžˆ ํ˜„๋ช…ํ•œ ์ผ์ด๋ผ๋Š” ๊ฒƒ์„ ์••๋‹ˆ๋‹ค.)

TypeScript๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์œ ํ˜• ์ •์˜๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด ์•„๋‹™๋‹ˆ๊นŒ? ์œ ํ˜• ์ •์˜ ์—†์ด ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์œ ํ˜• ์ •์˜๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ์ƒ์„ฑํ•˜๋„๋ก ๊ฐ•์š”๋ฐ›๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

TypeScript๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์ž˜๋ชป ์ดํ•ดํ•˜๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์œ ํ˜• ์ •์˜๋Š” ์„ ํƒ ์‚ฌํ•ญ์ด ์•„๋‹™๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์€ ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. _์ž์‹ ์˜ ์ฝ”๋“œ์—์„œ_ ์œ ํ˜• ์ •์˜๋Š” ์•”์‹œ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, Typescript ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ "์•Œ์•„๋‚ผ" ๊ฒƒ์ž…๋‹ˆ๋‹ค. Typescript ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ํ†ตํ•ด ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋Ÿฌํ•œ ์œ ํ˜•์ด ๋ฌด์—‡์ธ์ง€ ๊ฒฐ์ฝ” ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํƒ€์‚ฌ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด๋ผ๋ฉด ํ™•์‹คํžˆ ํ˜•์‹ํ™” ๋ฐ tsd ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@basarat์˜ ์ด ๋‹ต๋ณ€์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

http://stackoverflow.com/a/27434010/1529493

์œ ํ˜• ์ •์˜๊ฐ€ ์—†๋Š” ๋น„ TypeScript ๋ชจ๋“ˆ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

const koa = require(โ€˜koaโ€™)

2016๋…„ 1์›” 21์ผ 14์‹œ 47๋ถ„์— Teoh Han Hui [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์œ ํ˜• ์ •์˜๊ฐ€ ์—†๋Š” ๋ชจ๋“ˆ์„ ๊ทธ๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/Microsoft/TypeScript/issues/247#issuecomment -173574234์—์„œ ํ™•์ธํ•˜์„ธ์š”.

@bgrieder ES6 ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

(์ฆ‰, commonjs๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ) ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ declare var of Basarat ๋‹ต๋ณ€์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

2016๋…„ 1์›” 21์ผ 14์‹œ 48๋ถ„, Bruno Grieder bruno. [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

const koa = require(โ€˜koaโ€™)

2016๋…„ 1์›” 21์ผ 14์‹œ 47๋ถ„์— Teoh Han Hui < [email protected] [email protected] >์ด(๊ฐ€) ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์œ ํ˜• ์ •์˜๊ฐ€ ์—†๋Š” ๋ชจ๋“ˆ์„ ๊ทธ๋ ‡๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/Microsoft/TypeScript/issues/247#issuecomment -173574234์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์š”์ ์€ TypeScript์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์œ ํšจํ•œ JS๊ฐ€ ์œ ํšจํ•œ TS์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ES6 ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ TS๋Š” ์œ ํ˜• ์„ ์–ธ์ด ์žˆ๋“  ์—†๋“  ์ด๊ฒƒ์„ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์œ ํ˜• ์„ ์–ธ์ด ์—†์œผ๋ฉด import ๋ฌธ์€ any ๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

@์กฐ์šฐ๋“œ ๐Ÿ‘

2016๋…„ 1์›” 21์ผ 14์‹œ 52๋ถ„์— Joe Wood [email protected] ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์š”์ ์€ TypeScript์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์œ ํšจํ•œ JS๊ฐ€ ์œ ํšจํ•œ TS์—ฌ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ES6 ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์˜ ๊ฒฝ์šฐ TS๋Š” ์œ ํ˜• ์„ ์–ธ์ด ์žˆ๋“  ์—†๋“  ์ด๊ฒƒ์„ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜•์‹ ์„ ์–ธ์ด ์—†์œผ๋ฉด import ๋ฌธ์€ any๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/Microsoft/TypeScript/issues/247#issuecomment -173575301์—์„œ ํ™•์ธํ•˜์„ธ์š”.

FWIW ์ด ๋™์ž‘(๋ชจ๋“  ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ž…๋ ฅํ•ด์•ผ ํ•จ)์œผ๋กœ ์ธํ•ด TypeScript๋ณด๋‹ค Flow๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. TypeScript๋Š” IDE๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒƒ์ด ๋ฏธ๋ฆฌ ์ž…๋ ฅ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋งŽ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

  • ํ™•์‹คํ•˜๊ฒŒ ์ž…๋ ฅ๋˜์ง€ ์•Š์Œ
  • ./typings ํด๋”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ง์ ‘ ์“ธ ์‹œ๊ฐ„์ด ์—†์–ด์š”

๋‚ด ๋ฐœ์ „์— ๋„์›€์ด ๋  ๋งŒํ•œ ์ผ๊ณผ ์‹ธ์šฐ์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@danpantry , lib ์ง„์ž…์ ์„ any๋กœ ์„ ์–ธํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ์กฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

declare var $: any;

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

๋‚˜๋Š” ๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ๊ฐ€ ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ์„œ์„œํžˆ ์ปค์ง€๋Š” ๊ฒƒ๋ณด๋‹ค ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ผ์ฐ ๊ทธ๋ฆฌ๊ณ  ํฐ ์†Œ๋ฆฌ๋กœ (ํ˜„์žฌ ๋™์ž‘) ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ declare var foo: any ํ–‰์„ ์‚ฌ์šฉํ•˜์—ฌ "์ด๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ผ๊ณ  ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž…๋ ฅ์ด ์—†์„ ๋•Œ ES6 ๊ฐ€์ ธ์˜ค๊ธฐ ๊ตฌ๋ฌธ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ยซ๋ฐฉ์ถœ ๋ฐฉ์ง€ยป ์˜ค๋ฅ˜ ๋Œ€์‹  ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ any ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค๋Š” ๊ฐ„๋‹จํ•œ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

2016๋…„ 1์›” 21์ผ 18:42์— S. Chris Colbert [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„ ๋ฌธ์ œ๊ฐ€ ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์กฐ๊ธฐ์— ํฐ ์†Œ๋ฆฌ๋กœ ์‹คํŒจํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๋™์ž‘). ๋ช…์‹œ์ ์œผ๋กœ var foo: any ๋ผ์ธ์„ ์„ ์–ธํ•˜์—ฌ "์ด๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค"๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ํšŒ์‹ ํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/Microsoft/TypeScript/issues/247#issuecomment -173649845์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์–ด์จŒ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ˜„์žฌ ๋ชจ๋“ˆ์„ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ์œ ํ˜• ์ •์˜ ์—†์ด ๋ชจ๋“ˆ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ๋ณ„๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์ฃ ?

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

์—ด์•…ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์„ค๋ช…์— ๋งค์šฐ ๋™์˜ํ•˜๊ณ  ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค!

@sccolbert ์•Œ๋ฆผ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์‹คํŒจ์—ฌ์•ผ ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@mhegazy ๋ฐ @sccolbert์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ์˜ ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ(์ฆ‰, CI ์„œ๋ฒ„)๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํฐ ์†Œ๋ฆฌ๋กœ ๋ถˆํ‰ํ•˜๋Š” ๊ฒƒ์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

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

@devel-pa, ์˜ค๋ฅ˜๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ „ํ˜€ ๋ชจ๋ฅธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์ ธ์˜ค๊ธฐ์˜ ํ›„์† ์‚ฌ์šฉ์€ ํ™•์ธํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

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

์ƒ์„ฑ๋œ JS์˜ ๊ฒฝ์šฐ. TS ์œ ํ˜• ์˜ค๋ฅ˜ ์ค‘ ์–ด๋–ค ๊ฒƒ๋„ ์ถœ๋ ฅ ์ƒ์„ฑ์„ ์ค‘์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ํ˜• ์˜ค๋ฅ˜์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ชจ๋‘ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์—ฌ์ „ํžˆ ์ผ์น˜ํ•˜๋Š” .js ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋ˆ„๋ฝ๋œ ์ •์˜์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์ •์˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์˜ ์ „์ฒด ๋ชจ์–‘์„ ์„ ์–ธํ•  ํ•„์š”๋Š” ์—†๊ณ  ์ด๋ฆ„๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” "myLibrary" ๋ชจ๋“ˆ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜๋ฉฐ, ๋ชจ๋“ˆ ์ด๋ฆ„์˜ ์˜คํƒ€์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์ด ํ™•์ธ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค.

declare module "myLibrary" {
    var a: any;
    export = a;
}

#6615์— ์„ค๋ช…๋œ ๋Œ€๋กœ TypeScript๋Š” ๊ณง ๋” ์งง์€ ํ˜•์‹์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๊ฒƒ์ด ์˜จ๋ณด๋”ฉ ํ”„๋กœ์ ํŠธ์— ๋ฐœ์ƒํ•˜๋Š” ๊ณ ํ†ต์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์•”์‹œ์  any ์™€ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋Ÿฌํ•œ ๊ฐ€์ ธ์˜ค๊ธฐ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์•”์‹œ์  void ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์˜ค๋ฅ˜๋Š” ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋งŽ์€ ์†Œ์Œ์„ ์ผ์œผํ‚ค๊ณ  ์ ์ง„์ ์ธ ์ž…๋ ฅ ์ฒ ํ•™์— ์–ด๊ธ‹๋‚˜๊ณ  ์œ ํšจํ•œ JS๋Š” ์œ ํšจํ•œ TS์ž…๋‹ˆ๋‹ค.

TS๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ํ˜ผ๋ž€์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JS์—์„œ ES6 ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด TS์—์„œ๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? var x = require ์— ๋Œ€ํ•œ import from ์˜ ํŠน๋ณ„ํ•œ ์ ์€ ์•”์‹œ์  any๋กœ _is_ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์›๋ž˜ ๊ฐ€์ ธ์˜ค๊ธฐ ๋Š” TS ํŠน์ • ํ‚ค์›Œ๋“œ์˜€์œผ๋ฏ€๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชจ๋“ˆ์„ ์œ ํ˜•์ด ์ง€์ •๋œ ๋ชจ๋“ˆ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜€์Šต๋‹ˆ๋‹ค. ์ด์ œ TS์—๋งŒ ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿฐ ๊ฐ€์ •์„ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•”์‹œ์  ์˜ค๋ฅ˜๋Š” ์œ ํ˜•์ด ์—†๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ค๋Š˜๋‚ ์—๋„ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. jquery์˜ ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ $ ๋ผ๋Š” ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์–ด๋”˜๊ฐ€์— declare var $; ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ๊ฑฐ์˜ ๋™์ผํ•˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” "myLibrary" ๋ผ๋Š” ๋ชจ๋“ˆ์ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ์ž…๋ ฅ์ด ์ž˜๋ชป๋œ ์ด๋ฆ„์ด ์•„๋‹˜์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ์–ธ์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.

์–ด์จŒ๋“ , #6615๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ๋ชจ๋“ˆ๊ณผ ์ผ์น˜ํ•˜๋„๋ก declare module "*"; ์ถ”๊ฐ€๋ฅผ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋„๊ตฌ์—์„œ ๋„์›€์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๊ณ ํ†ต์Šค๋Ÿฌ์šด ๋‚˜์ค‘์— ์ œ๊ฑฐํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ๋•Œ ์ „ํ™˜ํ•˜์‹ญ์‹œ์˜ค.

@mhegazy ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ถ”๋ก ์„ ์ดํ•ดํ•˜์ง€๋งŒ ์ด ๊ทผ๊ฑฐ์— ์ •๋ง ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค

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

์ƒํ™ฉ์€ ์šฐ๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์ž…๋ ฅ๋œ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํ˜•์ด ์ง€์ •๋œ ๋ชจ๋“ˆ(package.json์— typings ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๋ชจ๋“ˆ)์ด ์‹ค์ œ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ํ•ด๋‹น ์ž๋ฆฌ ํ‘œ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋”์šฑ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ž๋ฆฌ ํ‘œ์‹œ์ž๋Š” ๋ฐฉ์ง€ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ์ตœ์†Œํ•œ ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
์˜นํ˜ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ any ๋กœ ํ•ด์„๋˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ ๊ฐ€ ๋ชจ๋“  ์ปดํŒŒ์ผ์—์„œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œํ•œ ์ปดํŒŒ์ผ๋Ÿฌ/CI ๋กœ๊ทธ๋ฅผ ๋ณด๋ฉด ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(๋‹จ, typescriptlang.org ํ™ˆ ํŽ˜์ด์ง€์— ๋ช…์‹œ๋œ ๋ฐ”์™€ ๊ฐ™์ด Typescript๋Š” Javascript์˜ '์ƒ์œ„ ์ง‘ํ•ฉ'์ด๋ฉฐ IMHO๋Š” ์œ ํšจํ•œ ES6 ๊ตฌ๋ฌธ์„ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์‚ผ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊ณผ ์นดํŽซ ์•„๋ž˜์— ์“ฐ๋ ˆ๊ธฐ๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๋Š” ์ตœ์•…์˜ ์ผ์ž…๋‹ˆ๋‹ค(ES6 super ์™ธ์—).
์ €๋Š” ํ•ญ์ƒ JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ง‘์—์„œ ์ž‘์—… ๋ฐ ์ถ”๊ฐ€ ์ฝ”๋”ฉ์˜ ์ผ๋ถ€๋กœ ๋งˆ์ง€๋ง‰ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 90%๋Š” ํ˜•์‹์ด ์ง€์ •๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ def๊ฐ€ ์žˆ๊ณ  9%๋Š” ํ˜•์‹์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ชจ๋“  ํŒŒ์ผ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ def๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์—). ์–ด๋Š ์ชฝ๋„ ๋งค์šฐ ์ข‹์€ ์ •์˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ด์ „ ์ด์œ ์™€ ๋‚ด ๋Œ€์ƒ์ด JS๋ผ๋Š” ์ด์œ ๋กœ ์›๋ž˜ ์–ธ์–ด์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ '์•Œ ์ˆ˜ ์—†๋Š”' ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๋Š” ์ด์œ ๋„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ์š”, ์ „ํ˜€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ณ  ์ดํ•ดํ•˜์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์™œ ๊ท€์ฐฎ๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ? ์ €๋Š” ์ œ๊ฐ€ ์™œ ๋ฌผ๊ฑด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜๋Š” ์ด์œ ๋ฅผ ์••๋‹ˆ๋‹ค. ๊ฒฝ๊ณ ์™€ ํ…Œ์ŠคํŠธ(์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ)๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
Pls, JavaScript ๋จผ์ €, ์ด๊ฒƒ์ด ๋Œ€์ƒ์ด์ž ์ƒํƒœ๊ณ„์ž…๋‹ˆ๋‹ค. TS๋Š” ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ๋” ๋‚˜์€ ์ฝ”๋”ฉ ๋ฐ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ์•ก์„ธ์„œ๋ฆฌ์ผ ๋ฟ์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ์ถ•ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์— ํ•œํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ํƒ€์ดํ”„์Šคํฌ๋ฆฝํŠธ ์‚ฌ์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.
๋‚˜๋Š” nmps peerDependencies ์—๋„ ๋ฐ˜๋Œ€ํ–ˆ๊ณ  ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด๊ฐ€ ์„ ํƒํ•œ ์‚ฌ๋žŒ์ž„์„ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ, ์ž๊ธฐ์•ผ.

node_modules ๋Œ€์‹  JSPM ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ๊ธฐ์กด ํ‹ฐ์ผ“์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค -> https://github.com/Microsoft/TypeScript/issues/6012

SystemJS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ๋…ธ๋“œ ๋ชจ๋“ˆ ํ™•์ธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ Node(๋”ฐ๋ผ์„œ TypeScript)๋Š” ๊ฒฝ๋กœ๊ฐ€ ์‹ค์ œ๋กœ ๋””๋ ‰ํ† ๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๊ณ  ๋Œ€์‹  index.ts ๋ฅผ ๋กœ๋“œํ•˜์ง€๋งŒ SystemJS๋Š” ๊ทธ๋Ÿฐ ์ผ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์œ ํšจํ•œ TS ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ๋“œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Š” index.ts/js ์ง„์ž…์ ์ด ์žˆ๊ฑฐ๋‚˜ package.json main ์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋…ธ๋“œ ๋ชจ๋“ˆ์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ SystemJS์— ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด (๋ฐ˜๋ณต์ ์ด์ง€๋งŒ) ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…ํ•˜๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ๋” ์‰ฝ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ž„์˜์˜ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ž‘์—…ํ•  ๋•Œ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์ ์ ˆํ•œ ํ•ด๊ฒฐ์ฑ…์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

JSPM ์ž๋™ ๋ชจ๋“ˆ ํ™•์ธ์€ ํ˜„์žฌ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ https://github.com/Microsoft/TypeScript/issues/6012์—์„œ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๋กœ ๋งคํ•‘ ๋ชจ๋“ˆ ํ™•์ธ ์ง€์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค( https://github.com/Microsoft/TypeScript-Handbook/blob/release-2.0/pages/Module%20Resolution.md#path -mapping ์ฐธ์กฐ).

์œ„์˜ ์ง€์นจ์€ ์‹œ์ž‘์ด์ง€๋งŒ ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์€ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
<Folder Include="node_modules" />
.njsproj๋กœ

๋” ๋งŽ์€ ์ •๋ณด

๋‚˜๋Š” ๊ฟ€๊บฝ ๊ฟ€๊บฝ ๊ฟ€๊บฝ ๋งˆ์‹œ๊ณ  ์žˆ์—ˆ๊ณ  .nsproj์—์„œ TypeScriptCompileBlocked๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. VS 15 Preview 5์—์„œ ๋””๋ฒ„๊น… ์ค‘๋‹จ์  ๋ฌธ์ œ("๋ชจ๋“ˆ์— ํ”„๋ ˆ์ž„์ด ์—†์Œ" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•จ) ๋ฐ Intellisense์—์„œ ๋ฐœ์ƒํ–ˆ๋˜ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. .njsproj๋กœ. ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ๋Š” ๋‚ด๊ฐ€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์ด๋ฏธ ๊ฑฐ๊ธฐ์— ์žˆ์—ˆ์ง€๋งŒ git-ignore๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Visual Studio๊ฐ€ ์ด๋ฅผ ๋ฌด์‹œํ•œ ์ด์œ ์— ๋Œ€ํ•œ ์ œ ์ด๋ก ์ž…๋‹ˆ๋‹ค(์•„๋งˆ๋„ node_modules์— ๋Œ€ํ•œ ์ž๋™ ์˜ˆ์™ธ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?)

๋””๋ฒ„๊น…๊ณผ Intellisense ๋ชจ๋‘ โ€‹โ€‹์ž‘๋™ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์˜ˆ์ƒ๋˜๋Š” ๋Œ€๋กœ ๊ฟ€๊บฝ ๊ฟ€๊บฝ ๊ฟ€๊บฝ ๊ฟ€๊บฝ๊บฝ๊บฝํ•˜๋ฉด์„œ ๋ณธ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋„˜์–ด์„œ๋Š” Intellisense ์˜ค๋ฅ˜๋„ ๋” ์ด์ƒ ๋ณผ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

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