Skip to content

Latest commit

Β 

History

History
134 lines (88 loc) Β· 6.79 KB

File metadata and controls

134 lines (88 loc) Β· 6.79 KB

νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ(Triple-slash) μ§€μ‹œμ–΄λŠ” 단일 XML νƒœκ·Έλ₯Ό ν¬ν•¨ν•˜λŠ” ν•œ 쀄 μ£Όμ„μž…λ‹ˆλ‹€. μ£Όμ„μ˜ λ‚΄μš©μ€ 컴파일러 μ§€μ‹œμ–΄λ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ§€μ‹œμ–΄λŠ” 였직 ν¬ν•¨λœ 파일의 μƒλ‹¨μ—μ„œλ§Œ μœ νš¨ν•©λ‹ˆλ‹€. νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ§€μ‹œμ–΄λŠ” λ‹€λ₯Έ νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ§€μ‹œμ–΄λ₯Ό ν¬ν•¨ν•œ ν•œ 쀄 ν˜Ήμ€ μ—¬λŸ¬ μ€„μ˜ 주석 μ•žμ—λ§Œ μœ„μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§Œμ•½ λ¬Έ ν˜Ήμ€ μ„ μ–Έ 뒀에 λ‚˜μ˜€λŠ” 경우, λ³΄ν†΅μ˜ ν•œ 쀄 μ£Όμ„μœΌλ‘œ 여겨지며 μ–΄λ–€ νŠΉλ³„ν•œ μ˜λ―Έλ„ κ°–μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

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

/// <reference path="..." /> μ§€μ‹œμ–΄λŠ” κ°€μž₯ 일반적인 μ§€μ‹œμ–΄μž…λ‹ˆλ‹€. 파일 κ°„ μ˜μ‘΄μ„± μ„ μ–ΈμœΌλ‘œ μ‚¬μš©λ©λ‹ˆλ‹€.

νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘°λŠ” 컴파일 ν”„λ‘œμ„ΈμŠ€μ— 좔가적인 νŒŒμΌμ„ ν¬ν•¨ν•˜λ„λ‘ μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ§€μ‹œν•©λ‹ˆλ‹€.

λ˜ν•œ --out λ˜λŠ” --outFile을 μ‚¬μš©ν•  λ•Œ 좜λ ₯물을 μ •λ ¬ν•˜κΈ° μœ„ν•œ λ°©λ²•μœΌλ‘œλ„ μ‚¬μš©λ©λ‹ˆλ‹€. νŒŒμΌμ€ μ „μ²˜λ¦¬ 톡과 ν›„ μž…λ ₯κ³Ό λ™μΌν•œ μˆœμ„œλ‘œ 좜λ ₯ 파일 μœ„μΉ˜μ— μƒμ„±λ©λ‹ˆλ‹€.

μž…λ ₯ 파일 μ „μ²˜λ¦¬ (Preprocessing input files)

μ»΄νŒŒμΌλŸ¬λŠ” λͺ¨λ“  νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘° μ§€μ‹œμ–΄λ₯Ό λΆ„μ„ν•˜κΈ° μœ„ν•΄ μž…λ ₯ νŒŒμΌμ— λŒ€ν•œ μ „μ²˜λ¦¬λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€. 이 κ³Όμ •μ—μ„œ, μΆ”κ°€ 파일이 μ»΄νŒŒμΌμ— μΆ”κ°€λ©λ‹ˆλ‹€.

이 과정은 root files μ§‘ν•©μ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€; 이것듀은 μ»€λ§¨λ“œ-λΌμΈμ΄λ‚˜ tsconfig.json 파일의 "files"λͺ©λ‘μ— μ§€μ •λœ 파일 μ΄λ¦„μž…λ‹ˆλ‹€. 이 루트 νŒŒμΌλ“€μ€ μ§€μ •λœ μˆœμ„œλŒ€λ‘œ μ „μ²˜λ¦¬ λ©λ‹ˆλ‹€. 파일이 λͺ©λ‘μ— μΆ”κ°€λ˜κΈ° μ „, νŒŒμΌμ— μžˆλŠ” λͺ¨λ“  νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘°κ°€ 처리되고 κ·Έ λŒ€μƒλ“€μ΄ ν¬ν•¨λ©λ‹ˆλ‹€. νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘°λŠ” νŒŒμΌμ—μ„œ λ³΄μ΄λŠ” μˆœμ„œλŒ€λ‘œ 깊이 μš°μ„ μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

λ£¨νŠΈκ°€ μ—†λŠ” 경우 νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘° κ²½λ‘œλŠ” 이λ₯Ό ν¬ν•¨ν•˜κ³  μžˆλŠ” νŒŒμΌμ„ κΈ°μ€€μœΌλ‘œ μ²˜λ¦¬λ©λ‹ˆλ‹€.

였λ₯˜ (Errors)

μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” νŒŒμΌμ„ μ°Έμ‘°ν•˜λŠ” 것은 였λ₯˜μž…λ‹ˆλ‹€. 파일이 자기 μžμ‹ μ— λŒ€ν•œ νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘°λ₯Ό κ°–λŠ” 것은 였λ₯˜μž…λ‹ˆλ‹€.

--noResolve μ‚¬μš©ν•˜κΈ° (Using --noResolve)

컴파일러 ν”Œλž˜κ·Έ --noResolveκ°€ μ§€μ •λ˜λ©΄ νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ μ°Έμ‘°λŠ” λ¬΄μ‹œλ©λ‹ˆλ‹€; μƒˆ νŒŒμΌμ„ μΆ”κ°€ν•˜κ±°λ‚˜ 제곡된 파일의 μˆœμ„œλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

/// <reference types="..." />

μ˜μ‘΄μ„±μ„ μ„ μ–Έ 역할을 ν•˜λŠ” /// <reference path="..." /> μ§€μ‹œμ–΄μ™€ μœ μ‚¬ν•˜κ²Œ, /// <reference types="..." /> μ§€μ‹œμ–΄λŠ” νŒ¨ν‚€μ§€μ˜ μ˜μ‘΄μ„±μ„ μ„ μ–Έν•©λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ 이름을 μ²˜λ¦¬ν•˜λŠ” 과정은 import λ¬Έμ—μ„œ λͺ¨λ“ˆ 이름을 μ²˜λ¦¬ν•˜λŠ” κ³Όμ •κ³Ό μœ μ‚¬ν•©λ‹ˆλ‹€. νŠΈλ¦¬ν”Œ-μŠ¬λž˜μ‹œ-μ°Έμ‘°-νƒ€μž… μ§€μ‹œμ–΄λ₯Ό μ„ μ–Έ νŒ¨ν‚€μ§€μ˜ import둜 μƒκ°ν•˜λ©΄ μ΄ν•΄ν•˜κΈ° μ‰½μŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μ„ μ–Έ νŒŒμΌμ— /// <reference types="node" />λ₯Ό ν¬ν•¨ν•˜λŠ” 것은 이 파일이 @types/node/index.d.ts에 μ„ μ–Έλœ 이름을 μ‚¬μš©ν•œλ‹€κ³  μ„ μ–Έν•˜λ©°; λ”°λΌμ„œ 이 νŒ¨ν‚€μ§€λŠ” μ„ μ–Έ 파일과 ν•¨κ»˜ μ»΄νŒŒμΌμ— ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

이 μ§€μ‹œμ–΄λŠ” d.ts νŒŒμΌμ„ 직접 μž‘μ„±ν•  λ•Œλ§Œ μ‚¬μš©ν•˜μ„Έμš”.

컴파일 쀑 μƒμ„±λœ μ„ μ–Έ 파일의 경우, μ»΄νŒŒμΌλŸ¬λŠ” μžλ™μœΌλ‘œ /// <reference types="..." />λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€; 였직 κ²°κ³Ό 파일이 참쑰된 νŒ¨ν‚€μ§€μ˜ 선언문을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ μƒμ„±λœ μ„ μ–Έ 파일 μ•ˆμ— /// <reference types="..." /> κ°€ μΆ”κ°€λ©λ‹ˆλ‹€.

.ts νŒŒμΌμ—μ„œ @type의 νŒ¨ν‚€μ§€μ˜ μ˜μ‘΄μ„±μ„ μ„ μ–Έν•˜λ €λ©΄, μ»€λ§¨λ“œ 라인에 --types 을 μ‚¬μš©ν•˜κ±°λ‚˜ tsconfig.json을 μ‚¬μš©ν•˜μ„Έμš”. tsconfig.jsonμ—μ„œ @types, typeRoots κ³Ό types μ‚¬μš©ν•˜κΈ°μ—μ„œ μ„ΈλΆ€ 사항을 ν™•μΈν•˜μ„Έμš”.

/// <reference lib="..." />

이 μ§€μ‹œμ–΄λŠ” 파일이 λͺ…μ‹œμ μœΌλ‘œ κΈ°μ‘΄ λ‚΄μž₯ lib νŒŒμΌμ„ ν¬ν•¨ν•˜λ„λ‘ ν•©λ‹ˆλ‹€.

λ‚΄μž₯ lib νŒŒμΌμ€ _tsconfig.json_의 "lib"컴파일러 μ˜΅μ…˜κ³Ό 같은 λ°©μ‹μœΌλ‘œ μ°Έμ‘°λ©λ‹ˆλ‹€ (예 :lib = "es2015.d"tsκ°€ μ•„λ‹Œ lib = "es2015"μ‚¬μš© λ“±).

DOM API λ˜λŠ”Symbol λ˜λŠ” Iterableκ³Ό 같은 λ‚΄μž₯ JS λŸ°νƒ€μž„ μƒμ„±μžμ™€ 같은 λ‚΄μž₯ νƒ€μž…μ— μ˜μ‘΄ν•˜λŠ” μ„ μ–Έ 파일 μž‘μ„±μžμ—κ²ŒλŠ” νŠΈλ¦¬ν”Œ μŠ¬λž˜μ‹œ μ°Έμ‘° lib μ§€μ‹œμ–΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 ꢌμž₯λ©λ‹ˆλ‹€. μ΄μ „μ—λŠ” 이런 .d.ts νŒŒμΌμ€ 그런 νƒ€μž…μ˜ 전달/쀑볡 선언을 μΆ”κ°€ν–ˆμ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ μ»΄νŒŒμΌμ—μ„œ 파일 쀑 ν•˜λ‚˜μ— /// <reference lib="es2017.string" />λ₯Ό μΆ”κ°€ν•œ 것 것은 --lib es2017.string으둜 컴파일 ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

/// <reference lib="es2017.string" />

"foo".padStart(4);

/// <reference no-default-lib="true"/>

이 μ§€μ‹œμ–΄λŠ” νŒŒμΌμ„ κΈ°λ³Έ 라이브러리라고 ν‘œμ‹œν•©λ‹ˆλ‹€. 이 주석은 lib.d.ts와 이λ₯Ό λ³€ν˜•ν•œ κ²ƒλ“€μ˜ 맨 μƒλ‹¨μ—μ„œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

이 μ§€μ‹œμ–΄λŠ” μ»΄νŒŒμΌλŸ¬μ—κ²Œ κΈ°λ³Έ 라이브러리(예.lib.d.ts)λ₯Ό μ»΄νŒŒμΌμ— ν¬ν•¨μ‹œν‚€μ§€ μ•Šλ„λ‘ μ§€μ‹œν•©λ‹ˆλ‹€. μ΄λŠ” μ»€λ§¨λ“œ 라인에 --nolib을 λ„˜κ²¨μ£ΌλŠ” 것과 λΉ„μŠ·ν•œ 영ν–₯을 μ€λ‹ˆλ‹€.

λ˜ν•œ --skipDefaultLibCheckλ₯Ό λ„˜κ²¨μ£Όλ©΄, μ»΄νŒŒμΌλŸ¬κ°€ /// <reference no-default-lib="true"/> 을 κ°–λŠ” 파일만 κ²€μ‚¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μœ μ˜ν•˜μ„Έμš”.

/// <amd-module />

기본적으둜 AMD λͺ¨λ“ˆμ€ 읡λͺ…μœΌλ‘œ μƒμ„±λ©λ‹ˆλ‹€. μ΄λŠ” λͺ¨λ“ˆλ‘œ λ§Œλ“€μ–΄ λ‚΄λŠ” 과정에 λ²ˆλ“€λŸ¬(예. r.js)와 같은 λ‹€λ₯Έ νˆ΄μ„ μ‚¬μš©ν•  경우 문제λ₯Ό λ°œμƒμ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

amd-module μ§€μ‹œμ–΄λŠ” μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ„ νƒμ μœΌλ‘œ λͺ¨λ“ˆμ˜ 이름을 λ„˜κΈΈ 수 μžˆλ„λ‘ ν•΄μ€λ‹ˆλ‹€:

amdModule.ts
///<amd-module name="NamedModule"/>
export class C {
}

μ΄λŠ” AMD define 호좜의 μΌλΆ€λ‘œ NamedModule 이름을 λͺ¨λ“ˆμ— ν• λ‹Ήν•˜λŠ” κ²°κ³Όλ₯Ό 낳을 κ²ƒμž…λ‹ˆλ‹€:

amdModule.js
define("NamedModule", ["require", "exports"], function (require, exports) {
    var C = (function () {
        function C() {
        }
        return C;
    })();
    exports.C = C;
});

/// <amd-dependency />

Note: 이 μ§€μ‹œμ–΄λŠ” deprecated λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  import "moduleName"; 문을 μ‚¬μš©ν•˜μ„Έμš”.

/// <amd-dependency path="x" />λŠ” μ»΄νŒŒμΌλŸ¬μ—κ²Œ TS-κ°€ μ•„λ‹Œ λͺ¨λ“ˆμ˜ μ˜μ‘΄μ„±μ΄ κ²°κ³Ό λͺ¨λ“ˆμ˜ require ν˜ΈμΆœμ— μΆ”κ°€λ˜μ–΄μ•Ό ν•œλ‹€κ³  μ•Œλ¦½λ‹ˆλ‹€.

amd-dependeny μ§€μ‹œμ–΄λŠ” μ„ νƒμ μœΌλ‘œ name ν”„λ‘œνΌν‹°λ₯Ό κ°–μŠ΅λ‹ˆλ‹€; 이둜 인해 amd-dependency에 μ„ νƒμ μœΌλ‘œ 이름을 전달할 수 μžˆμŠ΅λ‹ˆλ‹€:

/// <amd-dependency path="legacy/moduleA" name="moduleA"/>
declare var moduleA:MyType
moduleA.callStuff()

μƒμ„±λœ JS μ½”λ“œ:

define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) {
    moduleA.callStuff()
});