Skip to content

Saseungwon/TypeScript-Essentials

Repository files navigation

TypeScript

ํŠน์ง•

  1. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ํƒ€์ž…์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ™•์žฅ์‹œํ‚จ๋‹ค.
  2. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ดํ•ดํ•จ์œผ๋กœ์จ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์—๋Ÿฌ๋ฅผ ๊ณ ์น˜๋Š” ๋ฐ์— ๋“ค์–ด๊ฐ€๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•œ๋‹ค.
  3. ์˜คํ”ˆ์†Œ์Šค
  4. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ•ํ™”์‹œํ‚จ ์–ธ์–ด
  5. ์ˆœ์ˆ˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ์ปดํŒŒ์ผ ํ•ด์ค€๋‹ค.
  6. ์ „ํ†ต์ ์ธ Compile ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅธ ์ ์ด ๋งŽ์•„์„œ Transpile ์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์‚ฌ์šฉ

  • TypeScript๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰์‹œํ‚ค๋ ค๋ฉด TypeScript Compiler๋ฅผ ์‚ฌ์šฉํ•ด Plain JavaScript๋กœ ๋ฐ”๊ฟ” ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

์‹คํ–‰

  • node.js chrome's V8 JavaScript Engine์„ ์‚ฌ์šฉํ•˜์—ฌ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ  OS ๋ ˆ๋ฒจ์—์„œ์˜ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋ฒ„์‚ฌ์ด๋“œ์šฉ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ

  • browser HTML์„ ๋™์ ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ , DOM์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ

TS ์ปดํŒŒ์ผ๋Ÿฌ ๊ธ€๋กœ๋ฒŒ๋กœ ์„ค์น˜

  • ์„ค์น˜ npm install typescript -g
  • ์‹คํ–‰ tsc test.ts(ํŠน์ •ํŒŒ์ผ๋ช…์‹œ)
  • ์„ค์ •ํŒŒ์ผ ์ž๋™์ƒ์„ฑ(tsconfig.json) tsc --init
  • ํŒŒ์ผ ์ˆ˜์ •๋˜์—ˆ์„ ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ์ปดํŒŒ์ผ tsc -w

TS ์ปดํŒŒ์ผ๋Ÿฌ ํ”„๋กœ์ ํŠธ์—๋งŒ ์„ค์น˜

โžœ  TypeScript mkdir tsc-project
โžœ  TypeScript cd tsc-project 
โžœ  tsc-project npm init -y
{
  "name": "tsc-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

โžœ  tsc-project ls
package.json
โžœ  tsc-project npm i typescript
โžœ  tsc-project cat package.json
{
  "name": "tsc-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "typescript": "^4.6.3"
  }
}

โžœ  tsc-project ls node_modules 
typescript

// ์‹คํ–‰
โžœ  tsc-project npx tsc --init

โžœ  tsc-project nano test.ts
โžœ  tsc-project npx tsc
โžœ  tsc-project npx tsc -w

// package.json ์ˆ˜์ •
โžœ  tsc-project nano package.json
{
  "name": "tsc-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "tsc"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "typescript": "^4.6.3"
  }
}

// ์‹คํ–‰
โžœ  tsc-project npm run build

ํƒ€์ž…

  • ECMAScript Primitive Type 6๊ฐ€์ง€

    • Boolean
    • Number
    • String
    • Null
      • ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ๋Š”๋ฐ, ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋œ ๋œ ์ƒํƒœ
      • null์€ null๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
      • typeof ํ•˜๋ฉด object๋กœ ๋‚˜์˜ด
    • Undefined
      • ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” undefined๋ผ๋Š” ๊ฐ’์„ ๊ฐ€์ง„๋‹ค.
      • ์•„์˜ˆ ์ค€๋น„๊ฐ€ ์•ˆ ๋œ ์ƒํƒœ
      • typeof ํ•˜๋ฉด undefined ๋‚˜์˜ด
    • Symbol
    • Array: object
  • ts์—์„œ ์ถ”๊ฐ€๋œ ํƒ€์ž…

    • Any, Void, Never, Unknown
    • Enum
    • Tuple: objectํ˜•

ํƒ€์ž… ์‹œ์Šคํ…œ ์ข…๋ฅ˜

  1. ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ์‹œ์Šคํ…œ
  2. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก ํ•˜๋Š” ์‹œ์Šคํ…œ
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ํƒ€์ž… ์‹œ์Šคํ…œ

    • ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๊ฐ€๋Šฅ
    • ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ž๋™์œผ๋กœ ํƒ€์ž…์„ ์ถ”๋ก 
  • ํƒ€์ž…์ด๋ž€ ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ ๊ฒฐ์ •ํ•œ๋‹ค.

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์ถ”๋ก ์— ์˜์ง€ํ•˜๋Š” ๊ฒฝ์šฐ

// a์˜ ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์ด๊ธฐ ๋•Œ๋ฌธ์— a๋Š” any๋กœ ์ถ”๋ก ๋œ๋‹ค. 
function f3(a) {
  return a * 38; 
}
// ์‚ฌ์šฉ์ž๋Š” a๊ฐ€ any์ด๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์šฉ๋ฒ•์— ๋งž๊ฒŒ ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ๋‹ค. 
console.log(f3( 10 ) )   // 380
console.log(( f3 ( 'Mark' ) + 5))   // NaN
  • nolmplicitAny์˜ต์…˜

    • ํƒ€์ž…์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”๋ก  ์ค‘ any๋ผ๊ณ  ํŒ๋‹จํ•˜๊ฒŒ ๋˜๋ฉด ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๊ฒŒ ํ•œ๋‹ค.
  • strictNullChecks

    • ๋ชจ๋“  ํƒ€์ž…์— ์ž๋™์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋Š” null, undefined๋ฅผ ์ œ๊ฑฐํ•ด์ค€๋‹ค. ๋ฌด์กฐ๊ฑด ์ผœ์•ผํ•œ๋‹ค.
  • noImplicitReturns

    • ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ชจ๋“  ์ฝ”๋“œ๊ฐ€ ๊ฐ’์„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š์œผ๋ฉด, ์ปดํŒก๋ฆฌ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • object literal typescript

function f7(a: {name: string; age: number}): string{
  return  ~~~
}
  • ๋‚˜๋งŒ์˜ ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
interface PersonInterface {
  name: string; 
  age: number;
}

type PersonTypeAlias = {
  name: string;
  age: number;
}

function f8(a: PersonInterface): string {
  return ~~~
}

Structural Type System vs Nominal Type System

  • Structural Type System : ๊ตฌ์กฐ๊ฐ€ ๊ฐ™์œผ๋ฉด ๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ์ทจ๊ธ‰ -> TypeScript๋Š” ์ด๊ฑฐ
  • Nominal Type System : ๊ตฌ์กฐ๊ฐ€ ๊ฐ™์•„๋„ ์ด๋ฆ„์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํƒ€์ž…

ํƒ€์ž…ํ˜ธํ™˜์„ฑ

  • strictFunctionType์„ ์ผœ๋ฉด ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•  ์‹œ์— ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์ด ๊ฐ™๊ฑฐ๋‚˜ ์Šˆํผํƒ€์ž…์ธ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์—๋Ÿฌ๋ฅผ ํ†ตํ•ด ๊ฒฝ๊ณ ํ•œ๋‹ค.
// ์„œ๋ธŒํƒ€์ž…

    // sub1 ํƒ€์ž…์€ sup1 ํƒ€์ž…์˜ ์„œ๋ธŒ ํƒ€์ž…์ด๋‹ค. 
    let sub1: 1 = 1;
    let sup: number = sub1; 
    sub1 = sup1; //err sup ํƒ€์ž…์„ sub์— ๋„ฃ์„ ์ˆ˜ ์—†๋‹ค. 

    // sub2 ํƒ€์ž…์€ sup2์˜ ์„œ๋ธŒ(ํ•˜์œ„)ํƒ€์ž…์ด๋‹ค. 
    let sub2: number[] = [1]; 
    let sup2: object = sub2;
    sub2 = sup2; //err 

    // sub3 ํƒ€์ž…์€ sup3 ํƒ€์ž…์˜ ์„œ๋ธŒ ํƒ€์ž…์ด๋‹ค. 
    let sub3: [number, number] = [1, 2];  // ํŠœํ”Œ
    let sup3: number[] = sub3;            // ๋ฐฐ์—ด
    sub3 = sup3 // ๋ฐฐ์—ด > ํŠœํ’€

    // sub4 ํƒ€์ž…์€ sup4 ํƒ€์ž…์˜ ์„œ๋ธŒ ํƒ€์ž…์ด๋‹ค. 
    let sub4: number = 1; 
    let sup4: any = sub4; 
    sub4 = sup4;          // any๋Š” ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๊ณ  ๋‹ค ๋œ๋‹ค.

    // sub5 ํƒ€์ž…์€ sup5 ํƒ€์ž…์˜ ์„œ๋ธŒ ํƒ€์ž…์ด๋‹ค. 
    let sub5: never = 0 as never; 
    let sup5: number = sub5;
    sub5 = sup5;      // never x

    class Animal {}
    class Dog extends Animal{
      eat(){}
    }

    // sub6 ํƒ€์ž…์€ sup6 ํƒ€์ž…์˜ ์„œ๋ธŒ ํƒ€์ž…์ด๋‹ค. 
    let sub6: Dog = new Dog()
    let sup6: Animal = sub6;
    sub6 = sup6  // dog์—๋Š” animal์„ ํ• ๋‹น ๋ถˆ๊ฐ€ eat์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—

        // 1. ๊ฐ™๊ฑฐ๋‚˜ ์„œ๋ธŒํƒ€์ž…์ธ ๊ฒฝ์šฐ์—๋Š” ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค -> ๊ณต๋ณ€
        // 2. ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…๋งŒ ๊ฐ™๊ฑฐ๋‚˜ ์Šˆํผํƒ€์ž…์ธ ๊ฒฝ์šฐ, ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•˜๋‹ค. -> ๋ฐ˜๋ณ‘ 

Type Alias(ํƒ€์ž… ๋ณ„์นญ)

  • Interface์™€ ๋น„์Šทํ•จ
  • primitive, Union Type, Tuple, Function
  • ๊ธฐํƒ€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ํƒ€์ž…์„ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋งŒ๋“ค์–ด์ง„ ํƒ€์ž…์˜ refer๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ง€ ํƒ€์ž…์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  1. Aliasing Primitive
  • ๋”ฑํžˆ ์˜๋ฏธ ์—†์Œ
type MyStringType = string; 
const str = 'world';
let myStr: MyStringType = 'hello';
myStr = str; // ๋”ฑํžˆ ์˜๋ฏธ ์—†๋Š” ๊ฒƒ
  1. Aliasing Union Type
  • ์œ ๋‹ˆ์˜จ ํƒ€์ž…์€ A๋„ ๊ฐ€๋Šฅํ•˜๊ณ  B๋„ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…
  • ๊ธธ๊ฒŒ ์“ฐ๋Š” ๊ฑธ ์งง๊ฒŒ ํ•ด์คŒ
let person: string | number = 0;
type  StringOrNuber = string | number; 
let anoter: StringOrNumber = 0; 
another = 'Anna'; 
  1. Aliasing Tuple
  • ํŠœํ”Œ ํƒ€์ž…์— ๋ณ„์นญ์„ ์ค˜์„œ ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
let person: [string, number] = ['Mark', 35]; 
type PersonTuple = [string, number]; 
let anoter: PersonTuple = ['Anna', 24]; 
  1. Aliasing Function
  • ๊ธธ๊ฒŒ ์“ฐ๋Š” ๊ฒƒ ์งง๊ฒŒ ํ•ด์คŒ
type EatType = (food: string) => void; 

TypeScript Context(tsconfig.json)

  1. Compilation Context ์ผ์ข…์˜ ํŒฌ์‹œํ•œ ์šฉ์–ด๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํŒŒ์ผ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธํ™” ์‹œํ‚ค๋Š”๋ฐ ๊ทธ ๊ณผ์ •์—์„œ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ์„ค์ •์„ ๊ฐ€๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค ํŒŒ์ผ์„ ์ปดํŒŒ์ผ ํ•  ๊ฒƒ์ธ์ง€, ์•ˆ ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•œ๋‹ค. ์–ด๋–ค ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์„ค์ •ํ•  ๊ฒƒ์ธ์ง€ ์ ํ˜€์žˆ๋Š” context tsconfig.json ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค.

  2. compileOnSave

  • true/false(default false)
  • // ํŒŒ์ผ์„ ์„ธ์ด๋ธŒํ•˜๋ฉด ์ปดํŒŒ์ผ ์‹œํ‚ค๊ฒ ๋‹ค.
  1. extends
  • tsconfig.json ํŒŒ์ผ์ด ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ƒ์† ๋ฐ›๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • "extends": "./extendsBase.json", // ๊ฒฝ๋กœ๋ฅผ ์ ์–ด์คŒ
  1. files, include, exclude
  • ์…‹๋‹ค ์„ค์ •์ด ์—†์œผ๋ฉด, ์ „๋ถ€ ๋‹ค ์ปดํŒŒ์ผ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
  • files
    • ์ƒ๋Œ€ ํ˜น์€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ์˜ ๋ฆฌ์ŠคํŠธ ๋ฐฐ์—ด์ด๋‹ค.
    • exclude๋ณด๋‹ค ์„ธ๋‹ค.
  • include, exclude
    • globํŽ˜ํ„ด(๋งˆ์น˜ .gitignore)
    • include
      • exclude๋ณด๋‹ค ์•ฝํ•จ
    • exclude
      • ์„ค์ • ์•ˆ ํ•˜๋ฉด 4๊ฐ€์ง€๋ฅผ default๋กœ ์ œ์™ธ
      • outDir์€ ํ•ญ์ƒ ์ œ์™ธํ•œ๋‹ค.
  1. compileOptions
  • typeRoots

  • types

    • @types
      • ์•„๋ฌด ์„ค์ • ์•ˆ ํ•˜๋ฉด
        • node_modules/@types ๋ผ๋Š” ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ฐพ์•„์„œ ์‚ฌ์šฉ
      • typeRoots ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
        • ๋ฐฐ์—ด ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ๊ฒฝ๋กœ๋“ค ์•„๋ž˜์—์„œ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.
      • types ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด
        • ๋ฐฐ์—ด ์•ˆ์˜ ๋ชจ๋“ˆ ํ˜น์€ ./node_modules/@types/ ์•ˆ์˜ ๋ชจ๋“ˆ ์ด๋ฆ„์—์„œ ์ฐพ์•„์˜จ๋‹ค.
        • [] ๋นˆ ๋ฐฐ์—ด์„ ๋„ฃ์€๋‹ค๋Š” ๊ฒƒ์€ ์ด ์‹œ์Šคํ…œ์„ ์ด์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป
      • typeRoots์™€ types๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • target

    • ๋นŒ๋“œ์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ์–ด๋–ค ๋ฒ„์ „์œผ๋กœ ํ•  ๊ฒƒ์ด๋ƒ
    • ์ง€์ •์„ ์•ˆ ํ•˜๋ฉด es3๋กœ ์ง€์ •๋จ
  • lib

    • ๊ธฐ๋ณธ type definition ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ƒ
    • lib๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๋•Œ,
      • target์ด es3์ด๊ณ  ๋””ํดํŠธ๋กœ lib.d.ts๋ฅผ ์‚ฌ์šฉ
      • target์ด es5์ด๊ณ  ๋””ํดํŠธ๋กœ dom, es5, scripthost๋ฅผ ์‚ฌ์šฉ
      • target์ด es6์ด๊ณ  ๋””ํดํŠธ๋กœ dom, es6, dom.iterable, scripthost๋ฅผ ์‚ฌ์šฉ
    • lib๋ฅผ ์ง€์ •ํ•˜๋ฉด ๊ทธ lib ๋ฐฐ์—ด๋กœ๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
      • ๋นˆ[] => 'no definition found~'
  • outDir, outFile, rootDir

  • strict(๋ฌด์กฐ๊ฑด ํ‚ค๊ณ  ์‚ฌ์šฉํ•˜์ž) : ์—„๊ฒฉํ•˜๊ฒŒ ํƒ€์ž…์„ ํ™•์ธํ•˜๋Š” ์˜ต์…˜์„ ์ผ ๋‹ค.

    • noImplicitAny

      • ๋ช…์‹œ์ ์ด์ง€ ์•Š๊ฒŒ anyํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ, ํ‘œํ˜„์‹๊ณผ ์„ ์–ธ์— ์‚ฌ์šฉํ•˜๋ฉด, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ
      • ํƒ€์ž… ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ถ”๋ก ์„ ์‹คํŒจํ•œ ๊ฒฝ์šฐ, any๊ฐ€ ๋งž์œผ๋ฉด any๋ผ๊ณ  ์ง€์ •ํ•˜๋ผ.
      • ์•„๋ฌด๊ฒƒ๋„ ์“ฐ์ง€ ์•Š์œผ๋ฉด, ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ
      • ์ด ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด, any๋ผ๊ณ  ์ง€์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” any๊ฐ€ ์ •๋ง ์•„๋‹Œ๊ฑฐ๋‹ค. ํƒ€์ž…์ถ”๋ก ์ด ๋œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—
    • noImplicitThis

      • ๋ช…์‹œ์ ์ด์ง€ ์•Š๊ฒŒ anyํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ this ํ‘œํ˜„์‹์— ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒํ•œ๋‹ค.
      • ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ฒผ์ˆ˜ ์ž๋ฆฌ์— this๋ฅผ ๋†“๊ณ  this์— ๋Œ€ํ•œ ํƒ€์ž…์„ ์–ด๋–ค ๊ฒƒ์ด๋ผ๋„ ํ‘œํ˜„ํ•˜์ง€ ์•Š์œผ๋ฉด, noImplicitAny๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
      • js์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— this๋ฅผ ๋„ฃ์œผ๋ฉด ์ด๋ฏธ ์˜ˆ์•ฝ๋œ ํ‚ค์›Œ๋“œ๋ผ syntaxerror ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
      • this๋ฅผ any๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฆฌ์ ์ด๋‹ค.(๋ฌผ๋ก  ๊ตฌ์ฒด์ ์ธ ์‚ฌ์šฉ์ฒ˜๊ฐ€ ์žˆ์œผ๋ฉด ํƒ€์ž…์„ ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.)
      • this๋ฅผ ์ตœ๋Œ€ํ•œ ์ œํ•œํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํƒ€์ž…์ ์œผ๋กœ๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.
    • strictNullChecks

      • ์ผœ์ง€ ์•Š์œผ๋ฉด
        • ๋ชจ๋“  ํƒ€์ž…์€ null, undefined ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
        • string์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•ด๋„ null, undefined ๊ฐ’์„ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
      • ์ผœ๋ฉด
        • ๋ชจ๋“  ํƒ€์ž…์€ null, undefined ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๊ณ , ๊ฐ€์ง€๋ ค๋ฉด union type์„ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๋ช…์‹œํ•ด์•ผํ•œ๋‹ค.
        • any ํƒ€์ž…์€ null, undefined๋ฅผ ๊ฐ€์ง„๋‹ค.
      • strictNullChecks๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด null, undefined๋ฅผ ๊ฐ€์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•”๋ฌต์ ์œผ๋กœ ์ธ์ •ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ •ํ™•ํžˆ ์–ด๋–ค ํƒ€์ž…์ด ์˜ค๋Š” ์ง€๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค์Šค๋กœ ๊ฐ„๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค. null, undefined๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ฐ’์„ ์กฐ๊ฑด๋ถ€๋กœ ์ œ์™ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
      • ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋ถ€ํ„ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฆฌํ„ด ๊ฐ’์— ์ •ํ™•ํ•œ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์—ฌ์•ผํ•˜๊ณ , ๊ธฐ์šธ์ด๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.
    • strictFunctionTypes

      • ํ•จ์ˆ˜ ํƒ€์ž…์— ๋Œ€ํ•œ bivariand ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ฐ˜ํ™˜ํƒ€์ž…์€ ๊ณต๋ณ€์ ์ด์–ด์•ผ ํ•˜๊ณ , ์ธ์žํƒ€์ž…์€ ๋ฐ˜๊ณต๋ณ€์ ์ด์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์ธ์žํƒ€์ž…์€ ๊ณต๋ณ€์ ์ด๋ฉด์„œ, ๋ฐ˜๊ณต๋ณ€์ ์ธ ๊ฒƒ์ด ๋ฌธ์ œ๋‹ค.
      • ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด strictFunctionTypes -> ์˜ต์…˜์„ ์ผœ๋ฉด ์—๋Ÿฌ๊ฐ€ ์•ˆ ๋‚˜๋˜ ๊ฒƒ์„ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ํ•ด์ค€๋‹ค.
    • strictPropertyInitialization

      • ์ •์˜๋˜์ง€ ์•Š์€ ํด๋ž˜์Šค์˜ ์†์„ฑ์ด ์ƒ์„ฑ์ž์—๊ฒŒ ์ดˆ๊ธฐํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค.
      • ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด -strictNullChecks๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
    • strictBindCallApply

      • bind, call, apply์— ๋Œ€ํ•œ ๋” ์—„๊ฒฉํ•œ ๊ฒ€์‚ฌ ์ˆ˜ํ–‰
    • alwaysStrict

      • ๊ฐ ์†Œ์Šค ํŒŒ์ผ์— ๋Œ€ํ•ด js์˜ strict mode๋กœ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๊ณ , "์—„๊ฒฉํ•˜๊ฒŒ ์‚ฌ์šฉ"์„ ํ•ด์ œํ•œ๋‹ค.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors