๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
WEB/Front-End๐ŸŒ

[Typescript] predictable Typescript

by narang111 2021. 12. 12.

Typescript์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜๋Š” Typed ์–ธ์–ด๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, ๋‚ด๊ฐ€ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋ณ€์ˆ˜์™€ ๋ฐ์ดํ„ฐ ์ธ์ง€ ์„ค์ •์„ ํ•ด์ค˜์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์žฅ์ ์€ ์ฝ”๋“œ๋ฅผ ์ฝ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์‹คํ–‰์ด ๋˜๋Š”์ง€ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ ๋•Œ ์–ด๋–ค ์ธ์ˆ˜๋ฅผ ์ฃผ์–ด์•ผํ• ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

const greeting = (name: string, age:number, gender: string)=>{
    console.log(`Hello ${name} ${age} ${gender}`);
}

greeting("narang", 23, "female");

export {};

 

์•„๋ž˜์ฒ˜๋Ÿผ return ๊ฐ’์˜ ํƒ€์ž…์„ ์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

const greeting = (name: string, age:number, gender: string): string=>{
    return `Hello ${name} ${age} ${gender}`;
}

greeting("narang", 23, "female");

export {};

 

watch๋ชจ๋“œ์—์„œ ์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก tsc-watch ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.

yarn add tsc-watch --dev

 

dist์™€ src ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  index.ts ํŒŒ์ผ์„ src ์•ˆ์œผ๋กœ ๋„ฃ์–ด์ค€๋‹ค.

 

package.json

{
  "dependencies": {
    "tsc": "^2.0.3",
    "typescript": "^4.5.2"
  },
  "license": "MIT",
  "scripts": {
    "start" : "tsc-watch --onSuccess \" node dist/index.js\" "
  },
  "devDependencies": {
    "tsc-watch": "^4.5.0"
  }
}

 

 

sconfig.json

index.ts๋ฅผ src/**/*๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.

์ด์ œ ๋ชจ๋“  ๊ฒƒ์„ src์•ˆ์— ์ปดํŒŒ์ผ ํ•ด์ค„๊ฑฐ๋ผ์„œ ์ธ๋ฑ์Šค๋ฅผ src๋กœ ์˜ฎ๊ฒจ์ค„ ๊ฒƒ์ด๋‹ค.

๊ทธ ์™ธ์˜ ๋ชจ๋“  typescript๋„ src๋กœ ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  outDir๋ฅผ dist๋กœ ์ •ํ•ด์ค˜์„œ ์ปดํŒŒ์ผ ๋œ ๊ฒƒ๋“ค์„ dist๋กœ ๋“ค์–ด๊ฐ€๋„๋ก ํ•ด์ค€๋‹ค.

{
    "compilerOptions":{
        "module": "commonjs", // ๋‹ค์–‘ํ•œ ๊ฒƒ์„ import, export ํ•  ์ˆ˜ ์žˆ๋„๋ก
        "target": "ES2015", // ์–ด๋–ค ๋ฒ„์ „์˜ js๋กœ ์ปดํŒŒ์ผ?
        "sourceMap": true,
        "outDir" : "dist"
    },
    // ์–ด๋–ค ํŒŒ์ผ๋“ค์ด ์ปดํŒŒ์ผ ๊ณผ์ •์— ํฌํ•จ๋˜๋Š”์ง€
    "include" : ["src/**/*"],
    "exclude": ["node_modules"]

}

 

 

์‚ฌ์ง„์—์„œ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ watch๋ชจ๋“œ์—์„œ ์ปดํŒŒ์ผ์„ ์‹œ์ž‘ํ–ˆ๋‹ค.

src๊ฐ€ ๋ฐ”๋€Œ๋ฉด dist๊ฐ€ ๋ฐ”๋€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

index.js indes.js.map์„ ์ง€์šฐ๊ณ  ๋‹ค์‹œ yarn start ๋ฅผ ํ•˜๋ฉด ์ด๋ฒˆ์—๋Š” dist์—

js ํŒŒ์ผ๋“ค์ด ๋“ค์–ด๊ฐ„ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

index.ts

const greeting = (name: string, age:number, gender: string): string=>{
    return `Hello ${name} ${age} ${gender}`;
}

console.log(greeting("narang", 23, "female"));

export {};

 

 

 

index.ts์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋–„ object๋ฅผ ๋„˜๊ฒจ์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” interface๋ฅผ ์ •์˜ํ•ด์ค€๋‹ค.

typescript๋Š” ์ด person์ด Human ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š”์ง€ ์ฒดํฌํ•œ๋‹ค.

interface๋Š” ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค.

interface Human {
    name: string,
    age: number;
    gender: string;
}

const person = {
    name: "narang",
    age: 22,
    gender: "male"
};

const greeting = (person: Human): string=>{
    return `Hello ${person.name} ${person.age} ${person.gender}`;
}

console.log(greeting(person));

export {};