๐Ÿ“’[TypeScript ๋งˆ์Šคํ„ฐ with Webpack & React] Step15.๋ชจ๋“ˆ

๊ถŒ์šฉ์ค€ยท2023๋…„ 12์›” 6์ผ
0
post-thumbnail

1. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋ฉ”๋ชจ


๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ํŒŒ์ผ ๊ฐ„ ์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด๋ฉฐ

์ฝ”๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ณ  TypeScript์—์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜ค๋ž˜๋œ ๋ฐฉ์‹์ด๋‹ค.

2. ๋ชจ๋“ˆ ์—†์ด ์ž‘์—…ํ•˜๊ธฐ


javascript๋Š” export๋‚˜ ์ตœ์ƒ์œ„ await๊ฐ€ ์—†๋Š” ํŒŒ์ผ์„ ๋ชจ๋“ˆ์ด ์•„๋‹Œ ์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.

์Šคํฌ๋ฆฝํŠธ ์•ˆ์—์„œ ์ž‘์—…ํ•  ๋–„ ๋ณ€์ˆ˜์™€ ํƒ€์ž…์€ ๊ณต์œ  ์ „์—ญ ์Šค์ฝ”ํ”„ ๋‚ด๋ถ€์— ์žˆ๋‹ค๊ณ  ์„ ์–ธ๋œ๋‹ค.

์ฆ‰, export๋‚˜ ์ตœ์ƒ์œ„ await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด TypeScript๋Š” ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ํ•œ ์ „์—ญ ์Šค์ฝ”ํ”„์— ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•œ๋‹ค.

utils.ts
function add(x: number,y: number){
    return x + y;
}

function sample<T>(arr: T[]):T{
    const idx = Math.floor(Math.random() * arr.length);
    return arr[idx];
}
index.ts
sample([12, 3, 34]);
add(1,2);

์ง€๊ธˆ์€ ๋ชจ๋“ˆ๋กœ ์ž‘์—…ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ชจ๋‘ ์ „์—ญ ์Šค์ฝ”ํ”„ ์•ˆ์—์žˆ๋‹ค.

3. TypeScript ๋ชจ๋“ˆ ์ด์šฉํ•˜๊ธฐ


export ํ‚ค์›Œ๋“œ๋ฅผ ๋„ฃ์œผ๋ฉด TypeScript๋Š” ๋ชจ๋“ˆ์—์„œ ์ž‘์—…ํ•œ๋‹ค๊ณ  ์ธ์‹ํ•œ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์‹ถ์„๋•Œ export์™€ import๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

utils.ts
export function add(x: number,y: number){
    return x + y;
}

export function sample<T>(arr: T[]):T{
    const idx = Math.floor(Math.random() * arr.length);
    return arr[idx];
}
index.ts
import {add,sample} from "./utils.js" // javascript๋กœ ์ปดํŒŒ์ผ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ช…์„ .js๋กœ ์„ ์–ธ

sample([12, 3, 34]);
add(1,2);

4. ์ปดํŒŒ์ผ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ ๋ณ€๊ฒฝํ•˜๊ธฐ


๋ธŒ๋ผ์šฐ์ €์—์„œ export, import ๋ชจ๋“ˆ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ES๋ชจ๋“ˆ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  script ํƒœ๊ทธ์—์„œ module ํƒ€์ž…์„ ์„ ์–ธํ•ด์ค˜์•ผํ•œ๋‹ค.

package.json

"module" : "ES6" // 1. commonjs๋กœ ๋˜์–ด ์žˆ์œผ๋ฉด ES๋กœ ์‹œ์ž‘๋˜๋Š” ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค.
 
index.html
<body>
    <script type="module" src="./dist/index.js"> </script> <!-- 2. type์„ module์ด๋ผ๊ณ  ์„ ์–ธํ•ด์ค€๋‹ค. -->
</body>

5. Import/Export ๊ตฌ๋ฌธ ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ


export๋Š” ํ•จ์ˆ˜, ํด๋ž˜์Šค, ์ƒ์ˆ˜ ๋“ฑ ๋ญ๋“  export๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

export default ํ‚ค์›Œ๋“œ๋กœ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.์ด ํ‚ค์›Œ๋“œ๋Š” ํŒŒ์ผ์ด๋‚˜ ๋ชจ๋“ˆ๋งˆ๋‹ค ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ ๋• {}๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

User.ts

export default class User{
    constructor(public username: string, public email: string){}
    logOut(){
        console.log(`${this.username} logs out!!`);
    }
}

export function userHelper(){
    console.log("Help!");
}
index.ts
import {add,sample as randomsample} from "./utils.js" // as๋กœ ๋ช…์นญ์„ ๋ฐ”๊ฟ”์ค„ ์ˆ˜ ์žˆ๋‹ค.
import User,{userHelper} from "./User.js"; // export default๋Š” 

randomsample([12, 3, 34]);

6. ํƒ€์ž… ๊ฐ€์ ธ์˜ค๊ธฐ


ํƒ€์ž…์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ Babel ๊ฐ™์€ ํŠธ๋žœ์ŠคํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ TypeScript 3.8๋ฒ„์ „ ๋ถ€ํ„ฐ
import ๋ฌธ์— type์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ ํƒ€์ž…์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

types.ts
export interface Person{
    username: string;
    email: string;
}

export type Color = "red" | "blue";
User.ts
import type {Person} from './types.js'; // type ์ด๋ผ๊ณ  ๋ช…์‹œํ•˜๋ฉด ์•ˆ์ „ํ•˜๊ฒŒ type์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ

export default class User implements Person{
    constructor(public username: string, public email: string){}
    logOut(){
        console.log(`${this.username} logs out!!`);
    }
}

export function userHelper(){
    console.log("Help!");
}
profile
Brendan Eich, Jordan Walke, Evan You, ๊ถŒ์šฉ์ค€

0๊ฐœ์˜ ๋Œ“๊ธ€