2024-06-27.md
π‘DIL: μ΄νν°λΈ νμ μ€ν¬λ¦½νΈ
μ€ν°λ: μκ° CS, https://github.com/monthly-cs/2024-05-effective-typescript
μμ±μΌ: 2024-06-27
μμ±μ: dusunax
8μ₯ νμ μ€ν¬λ¦½νΈ λ§μ΄κ·Έλ μ΄μ
- νμ
μ€ν¬λ¦½νΈ λ§μ΄κ·Έλ μ΄μ
κ·Όκ±°: νμ
μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νλ€λ©΄ μ»΄νμΌ μμ μμ λ°©μ§ν μ μμμ λ²κ·Έ
- κΉν μλ°μ€ν¬λ¦½νΈ νλ‘μ νΈ λ²κ·Έ: 15%
- μμ΄λΉμ€λΉ μ§ν νλ‘μ νΈ μ¬ν λΆμ post-mortem 6κ°μμΉ: 38%
- λ§μ΄κ·Έλ μ΄μ
μ? μ μ§μ μΌλ‘!
- noImplicitAny off
μμ΄ν 58: λͺ¨λ μλ°μ€ν¬λ¦½νΈλ‘ μμ±νκΈ°
- νμ μ€ν¬λ¦½νΈ => νΉμ λ²μ μ jsλ‘ μ»΄νμΌ κ°λ₯, νΈλμ€νμΌλ¬ transpiler λ‘ μ¬μ©ν μ μλ€.
- μλ λ²μ μ JSλ₯Ό λͺ¨λνκ² λ°κΎΈλ μμ
λ νμ
μ€ν¬λ¦½νΈ μ ν μμ
μ μΌλΆλΌκ³ λ³Ό μ μλ€.
- μ΅μ JS κΈ°λ₯λ 체ν¬λκΈ° λλ¬Έμ μ½λ μμ± μμ λμλ λ°μ μ μκ³ & μ λλ‘λ μ¬μ©λ²μ μ΅ν λ λμλ¨
- μ£Όμ κΈ°λ₯: ECMAScript Module, ES2015 Class
ECMAScript Module
- ES2015 μ΄μ μλ μ½λλ₯Ό κ°λ³ λͺ¨λλ‘ λΆν νλ λ°©λ²μ΄ μμλ€. μ§κΈμ?
1. <script type="module">
:
<script type="module">
import { myFunction } from "./myModule.js";
myFunction();
</script>
HTMLμμ <script type="module">
μ μ¬μ©νλ©΄ ES6 λͺ¨λμ μ¬μ©ν μ μμ΅λλ€. μ μμ μμλ myModule.js
μμ myFunction
μ κ°μ Έμμ νΈμΆν©λλ€.
2. μλ μ°κ²°:
// file1.js
const part1 = "Hello, ";
// file2.js
const part2 = "World!";
// combined.js
const part1 = "Hello, ";
const part2 = "World!";
console.log(part1 + part2); // "Hello, World!"
μλ μ°κ²°μ μ¬λ¬ νμΌμ μ½λλ₯Ό νλμ νμΌλ‘ μλμΌλ‘ ν©μΉλ λ°©λ²μ
λλ€. μλ₯Ό λ€μ΄, file1.js
μ file2.js
μ λ΄μ©μ combined.js
μ 볡μ¬νμ¬ λΆμ¬λ£μ΅λλ€.
3. Makefile:
all: combined.js
combined.js: file1.js file2.js
cat file1.js file2.js > combined.js
Makefileμ νλ‘μ νΈ λΉλ κ³Όμ μ μλννλ νμΌμ
λλ€. μ μμ λ file1.js
μ file2.js
λ₯Ό combined.js
λ‘ κ²°ν©νλ λͺ
λ Ήμ ν¬ν¨ν©λλ€.
4. NodeJS require
:
// module1.js
module.exports = function () {
console.log("Hello from module1");
};
// main.js
const module1 = require("./module1");
module1(); // "Hello from module1"
Node.jsμμ require
λ₯Ό μ¬μ©νμ¬ λͺ¨λμ κ°μ Έμ΅λλ€. module1.js
μμ ν¨μλ₯Ό λ΄λ³΄λ΄κ³ , main.js
μμ require
λ‘ κ°μ Έμμ νΈμΆν©λλ€.
5. AMD define
μ½λ°±:
// module.js
define(["dependency"], function (dependency) {
return function () {
console.log("Hello from AMD module");
};
});
// main.js
require(["module"], function (module) {
module(); // "Hello from AMD module"
});
AMD νμμμλ define
ν¨μλ₯Ό μ¬μ©νμ¬ λͺ¨λμ μ μνκ³ , μ’
μμ±μ λͺ
μν©λλ€. require
λ‘ λͺ¨λμ κ°μ Έμμ μ¬μ©ν©λλ€.
6. νμ μ€ν¬λ¦½νΈ μ체μ λͺ¨λ:
// a.ts
module A {
export function sayHello() {
console.log("Hello from module A");
}
}
// b.ts
/// <reference path="a.ts" />
module B {
export function callA() {
A.sayHello();
}
}
// main.ts
/// <reference path="a.ts" />
/// <reference path="b.ts" />
B.callA();
/// <reference path="...">
λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ νμΌμ λ΄μ©μ μ°Έμ‘°ν©λλ€. κ·Έλ° λ€μ TypeScript μ»΄νμΌλ¬λ₯Ό μ¬μ©νμ¬ λͺ¨λ νμΌμ νλλ‘ λ³ν©ν μ μμ΅λλ€.
ECMAScript Module
- ES2015 μ΄ν νμ€
- λ§μ΄κ·Έλ μ΄μ
λμ JS μ½λκ° λ¨μΌ νμΌμ΄κ±°λ λΉνμ€ λͺ¨λ μμ€ν
(μμ λͺ¨λλ€)μ μ¬μ©νλ€λ©΄? ESλͺ¨λλ‘ μ ννλ κ²μ΄ μ’λ€.
- νλ‘μ νΈμ λ°λΌ μΉν©, ts-nodeκ° νμν κ²½μ° μμ
- λͺ¨λ λ¨μλ‘ μ μ§μ λ§μ΄κ·Έλ μ΄μ μ ν μ μμ!
// CommonJS
// a.js
const b = require("./b");
console.log(b.name);
//b.js
const name = "Module B";
module.exports = { name };
// ECMAScript module
// a.ts
import * as b from "./b";
console.log(b.name);
// b.ts
export const name = "Module B";