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/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์ ์ธ๊ธฐ ์๋ ๊ท์น์ ์ง์ํ๋ ๊ฒ์ ๋๋ค.
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 ๊ท์น์ ์ง์ํ๋ ๊ฒ์ ๋๋ค.
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 ์ ์๋ ์ป์ ์ ์์ต๋๋ค! ์ค์น๋ ๋ชจ๋ ๋ฒ์ ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ต์ ์ํ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์์ ์ฐ๋ฆฌ๊ฐ ์ป๋ ๊ฒ์
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์ ๋ํด ์๋ ๊ฒ์ด ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ๋งํ๋ ๋ด์ฉ์ ์ค์ ๋ก ์ค์ํ์ง ์์ ์ ์์ต๋๋ค.)
[์ ๋ฌธ์ ์ค๋ช ์์ 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 ์ฌ์ฉ)์ ์ผ๋ถ์ธ ๋ชจ๋์ ๋ํ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ํ์ฌ ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
import Foo = require("node_modules/mymodule/Foo");
tsc๊ฐ import ์ ์ธ์์ ์ธ๋ถ ๋ชจ๋ ์ด๋ฆ์ ํ์ธํ ๋ค์ ๊ฒฝ๋ก ํ์ธ ์ค์ node.js ๋ฐํ์๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก node_modules
๋ฅผ ์ ์ฉํ ์ ์์ต๋๊น? ์ปดํ์ผ๋ฌ ์ต์
์ผ๋ก ์ด๋ฅผ ์ผ๊ฑฐ๋ ๋ ์๋ ์์ต๋๋ค.
:+1: :+1: :+1:
tsc๊ฐ ๊ฐ์ ธ์ค๊ธฐ ์ ์ธ์์ ์ธ๋ถ ๋ชจ๋ ์ด๋ฆ์ ํ์ธํ ๋ค์ ๊ฒฝ๋ก ํ์ธ ์ค์ node.js ๋ฐํ์๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก node_modules๋ฅผ ์ ์ฉํ ์ ์์ต๋๊น?
์ด๊ฒ์ด _ํด์ผ ํ๋_ ๋ฐฉ๋ฒ์ ๋๋ค. ํด๋น ์ด๋ฆ์ ๊ฐ์ง ํ์ผ์ ์ฐพ๊ธฐ ์ํด ๋๋ ํ ๋ฆฌ ํธ๋ฆฌ๋ฅผ ์ฐพ๋ ํ์ฌ ๋ฐฉ์์ JS ์คํ ์ปจํ ์คํธ์ ์ ์ฌํ์ง ์์ต๋๋ค.
์ด๊ฒ์ ์ ์ ๋์ ๋ด ๋ชฉ๋ก์ ์์์ต๋๋ค. ๋ค์ ๋ฆด๋ฆฌ์ค์์ ์ด๊ฒ์ ์ป์ผ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค.
์ฐ๋ฆฌ( Booktrack )๋ ๋ชจ๋ ์น ๊ฐ๋ฐ์ TypeScript๋ฅผ ์ฌ์ฉํ๋ฉฐ node.js ๊ฐ๋ฐ์์ ๋น์ทํ ๋ฌธ์ ์ ์ง๋ฉดํด ์์ต๋๋ค. ์น ๊ฐ๋ฐ์์ ๋ชฉ์๋ฆฌ๊ฐ ๋ ธ๋ ๊ฐ๋ฐ์์ ๋ชฉ์๋ฆฌ๋งํผ ํฌ์ง ์๊ธฐ ๋๋ฌธ์ ๋ชฉ์๋ฆฌ๋ฅผ ๋ ๋๋ค.
์๋ฃจ์ (์ต์ ์์ ์ฐ๋ฆฌ์๊ฒ ๊ฐ์ฅ ์ข์ ์์):
node_modules
์ ๋ํ ํ๋ ์ฝ๋ฉ๋ ์กฐํ๋ฅผ ํตํ ์ต์์ ์ธ๋ถ ๋ชจ๋ ์ด๋ฆ ํ์ธnode_modules
๋๋ ํ ๋ฆฌ์ ๋ํ ์ต์์ ์ธ๋ถ ๋ชจ๋ ์ด๋ฆ์ ์ ํ์ ํ์ธ์ ์ ์ดํ๋ โโ์ปดํ์ผ๋ฌ ํ๋๊ทธ์ต์ 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 ์ฌ์ฌ์ฉ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ ๋ง๋ก ํผํด์ผ ํฉ๋๋ค ///
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๋ฅผ ์ฐธ์กฐํ์ฌ ์ด๋ฌํ ํจํค์ง๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์กดํ์ง ์๋ ํจํค์ง๋ฅผ ๊ณต์ ํ๋ฉด _์๋ฒฝํ๊ฒ_ ์๋ํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ชจ๋ ์ถฉ๋ ํด๊ฒฐ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํฉ๋๋ค.
์ ๋ ์ด ๊ฒฝ์ฐ์ ๋ํ ์ ์์ ๋ฐ์ ์ ์์ง๋ง ์ ๊ณํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
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์ ์ด ๋ต๋ณ์ ์ด๋ป์ต๋๊น?
์ ํ ์ ์๊ฐ ์๋ ๋น 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์์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์์ ํ๋ ค๋ฉด ์ถ๊ฐํด์ผ ํ์ต๋๋ค.
๋๋ฒ๊น ๊ณผ Intellisense ๋ชจ๋ โโ์๋ํ๋ ๊ฒ ์ธ์๋ ์์๋๋ ๋๋ก ๊ฟ๊บฝ ๊ฟ๊บฝ ๊ฟ๊บฝ ๊ฟ๊บฝ๊บฝ๊บฝํ๋ฉด์ ๋ณธ ๊ฒ๊ณผ ๋๊ฐ์ ์ค๋ฅ๋ฅผ ๋์ด์๋ Intellisense ์ค๋ฅ๋ ๋ ์ด์ ๋ณผ ์ ์์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด์จ๋ ์ปดํ์ผ๋ฌ๋ ํ์ฌ ๋ชจ๋์ ์ฐพ์ ์ ์๋ค๊ณ ์ฃผ์ฅํ์ง๋ง ์ค์ ๋ก๋ ์ ํ ์ ์ ์์ด ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๊ฑฐ๋ถํ๋ ๊ฒ๋ฟ์ ๋๋ค. ๋ณ๋ก ๋์์ด ๋์ง ์์ฃ ?