Design-loving front-end engineer
Ryong
Design-loving front-end engineer
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
    • Framework
    • React
      • Concept
      • Library
      • Hook
      • Component
      • Test
    • NodeJS
    • Android
      • Concept
      • Code
      • Sunflower
      • Etc
    • Flutter
      • Concept
      • Package
    • Web
    • Web
    • CSS
    • Language
    • JavaScript
    • TypeScript
    • Kotlin
    • Dart
    • Algorithm
    • Data Structure
    • Programmers
    • Management
    • Git
    • Editor
    • VSCode
    • Knowledge
    • Voice
Design-loving front-end engineer

Ryong

TypeScript

[ TS ] What is TypeScript?

2022. 7. 8. 17:00

๐Ÿ”ด  Why not JavaScript

 
// ์ด์ƒํ•ด!!
[1, 2, 3, 4] + false
// '1, 2, 3, 4false'

// ์ด์ƒํ•ด!!
function divide(a, b) {
  return a / b;
}
divide("xxxxx");
// NaN => ์™œ Error๋ฅผ ์ถœ๋ ฅํ•˜์ง€ ์•Š์ง€?

 

๐ŸŸ   Implicit Types vs Explicit Types

 
let a = "hello"
let b : boolean = false  // But, TypeScript๊ฐ€ ์ถ”๋ก ํ•˜๋„๋ก ํ•˜๋Š”๊ฒŒ ๋‚ซ๋‹ค.

 

๐ŸŸก  Types of TS part One

 
type Name = string;
type Age = number;
type Player = {
  name: Name,
  age?: Age  // ์„ ํƒ์  ํƒ€์ž…
}

const player1 : Player = {
  name: "player1"
}
const player2 : Player = {
  name: "player2",
  age: 28
}
// using normal function
function playerMaker(name: string) : Player {
  return {
    name
  }
}
// using arrow funciton
const playerMaker = (name: string) : Player => ({ name });

const player3 = playerMaker("player3");
player3.age = 28

 

๐ŸŸข  Types of TS part Two

โšช  readonly

 
type Name = string;
type Age = number;
type Player = {
  readonly name: Name,
  age?: Age
}
const playerMaker = (name: string) : Player => ({ name })
const ryong = playerMaker("ryong");

ryong.name = "jeong";  // Error!
 
const numbers: readonly number[] = [1, 2, 3, 4];
numbers.push(1);  // Error

โšช  tuple

 
// Tuple :: ํ•ญ์ƒ ์ •ํ•ด์ง„ ๊ฐฏ์ˆ˜์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•˜๋Š” array๋ฅผ ์ง€์ •
const player: [string, number, boolean] = ["ryong", 28, true];

player[0] = 1;  // ERROR
 
const player: readonly [string, number, boolean] = ["ryong", 28, true];

player[0] = "hi";  // ERROR

โšช  any

 
// any :: TypeScript ๋ณดํ˜ธ์žฅ์น˜๋กœ๋ถ€ํ„ฐ ๋น ์ ธ๋‚˜์˜ค๊ธฐ
const a : any[] = [1, 2, 3, 4]
const b : any = true

a + b  // Not Error

 

๐Ÿ”ต  Types of TS part Three

โšช  unknown

 
// API๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๋Š”๋ฐ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ ๋ชจ๋ฅผ ๋•Œ๋Š” unknown๋ฅผ ์‚ฌ์šฉ
let a: unknown;

let b = a + 1;  // ERROR
if (typeof a === 'number') {
  // ์ฝ”๋“œ์—์„œ a์˜ ํƒ€์ž…์ด number์ธ์ง€ ํ™•์ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ
  let b = a + 1;
}

let c = a.toUpperCase();  // ERROR
if (typeof a === 'string') {
  let b = a.toUpperCase();
}

โšช  void

 
// void :: ์•„๋ฌด๊ฒƒ๋„ return ํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ๋Œ€์ƒ
function hello() {
  console.log('x');
}
const a = hello();
a.toUpperCase();  // ERROR because of 'void'

โšช  never

 
// never :: ํ•จ์ˆ˜๊ฐ€ ์ ˆ๋Œ€ return ํ•˜์ง€ ์•Š์„ ๋•Œ ๋ฐœ์ƒ
// ์˜ˆ๋ฅผ ๋“ค์–ด ํ•จ์ˆ˜์—์„œ exception์ด ๋ฐœ์ƒํ•  ๋•Œ
function hello(): never {
  // return 'X';  // ERROR
  throw new Error("X");
}

function hello(name: string|number) {
  if (typeof name === 'string') {
    name  // name: string
  } else if (typeof name === 'number') {
    name // name: number
  } else {
    name  // name: never
  }
}

 

์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'TypeScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ TS ] Classes and Interfaces  (0) 2022.07.17
[ TS ] Functions  (0) 2022.07.17
    'TypeScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [ TS ] Classes and Interfaces
    • [ TS ] Functions
    Design-loving front-end engineer
    Design-loving front-end engineer
    ๋””์ž์ธ์— ๊ด€์‹ฌ์ด ๋งŽ์€ ๋ชจ๋ฐ”์ผ ์•ฑ ์—”์ง€๋‹ˆ์–ด Ryong์ž…๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”