[TS] ๐Ÿงชtypescript ๊ธฐ๋ณธ ํƒ€์ž… ์ •๋ฆฌ

TATAยท2023๋…„ 3์›” 26์ผ
0

TypeScript

๋ชฉ๋ก ๋ณด๊ธฐ
1/4

๐ŸงชPrimitive

์›์‹œ ํƒ€์ž…
โˆ’ ๋ถˆ๋ณ€์ด๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฐ’๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. (ํƒ€์ž… ์ถ”๋ก ์ด ๋จ)

// 1. Boolean
const Boo: Boolean = false;

// 2. Number
const num: number = 123;

// 3. String
const str: string = '123';

// 4. Bigint
const big: bigint = 100n;

/* ์ด๋ ‡๊ฒŒ ์ง์ ‘ ์ง€์ •ํ•ด ์ฃผ์–ด๋„ ๋œ๋‹ค. */
const strTata: 'tata' = 'tata';

๐ŸงชObject

๊ฐ์ฒด ํƒ€์ž…

// 1. Object
//    ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด any์™€ ๋‹ค๋ฅผ ๊ฒŒ ์—†๋‹ค.
const obj: object = { a: 'TATA' };

// ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ๋จ
const obj2: { str: string, num: number } = {
  str: 'tata',
  num: 7,
}

// 2. Enum
enum BT21 {
  TATA,           /* 0 */
  CHIMMY = 7,     /* 7 */
  RJ              /* 8 */
}
const bt21: BT21 = BT21.TATA /* ์ด๋Ÿฐ ์‹์œผ๋กœ ์‚ฌ์šฉํ•จ */

๐ŸงชFunction

ํ•จ์ˆ˜ ํƒ€์ž…

// 1. Void
//    ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•˜๋ฉด => ๋ฆฌํ„ด๋˜๋Š” ๊ฐ’์ด ์—†๋‹ค๋Š” ์˜๋ฏธ
function a(): void {
  console.log('TATA');
}

// 2. Never
//    ์ ˆ๋Œ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์—†๋Š” ํƒ€์ž…
function loop(): never {
  while(true) {
    console.log('TATA');
  }
}

// 3. string์ด๋‚˜ number๋กœ ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ง€์ •ํ•ด ์ฃผ์–ด๋„ ๋˜๋‚˜,
//    ํƒ€์ž… ์ถ”๋ก ์ด ๋˜๊ธฐ์— ๊ตณ์ด ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
//    (๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž…์€ ์ง€์ •ํ•ด ์ฃผ๊ธฐ)
function b(num: number, str: string): number {
  return num + Number(str);
}
b(777, '777')

// 4. Object
function c(obj: { num: number, str: string }) {
  return obj.num + obj.str;
}
c({ 7, 'tata' })

// 5. Function
//    ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
function d(num: Function): Function {
  return num
}

๐ŸงชArray

๋ฐฐ์—ด ํƒ€์ž…

// 1. Array
const numList: number[] = [1, 2, 3];
const strList: string[] = ['1', '2', '3'];
const booList: boolean[] = [true, false, true];
// โ†“ ์ด๋Ÿฐ ๋ฐฉ์‹๋„ ์žˆ์Œ
// const numList2: Array<number> = [1, 2, 3];
// const strList2: Array<string> = ['1', '2', '3'];

// 2. Tuple
const tuple: [number, string] = [1, "1"]
const tuple2: [number, ...string[]] = [1, '1', '2']

๐ŸงชLiteral

๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…

// 1. let
//    ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
let letStr = 'tata' // string
 
// 2. const
//    ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
const conStr = 'tata' // 'tata'

๐Ÿงชundefined / null

undefined / null

// 1. undefined
const a: number | undefined = undefined;

// 2. null
const b: number | null = null;

๐Ÿงชany / unknown

any / unknown

// 1. any
const a: any = 4;
const b: any = 'string';

// 2. unknown
//    => any์ฒ˜๋Ÿผ ๋ชจ๋“  ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์ƒ๋Œ€์ ์œผ๋กœ ์—„๊ฒฉํ•˜๋ฉฐ,
//       ์ง์ ‘ ๋ช…์‹œํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
//       (assertion ๋˜๋Š” ํƒ€์ž… ๊ฐ€๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•จ)
let a: unknown = 7;

if (typeof a === 'string') {
  a.trim();
}
// (a as string).trim();

๐ŸงชInterface

์ธํ„ฐํŽ˜์ด์Šค

// - interface: ํƒ€์ž… ์ •์˜
// - implements: ๊ตฌํ˜„
interface User {
  nickname: string;
  age?: number; // ?๊ฐ€ ์žˆ์œผ๋ฉด ํ•„์ˆ˜๋กœ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  introduce(): void;
}

// ๋‹ค๋ฅธ interface์—์„œ implements ๊ฐ€๋Šฅ
// class์—์„œ extends๋ฅผ ์‚ฌ์šฉํ•œ ์ƒํƒœ์—์„œ๋„ implements ๊ฐ€๋Šฅ
class Play implements User {
  nickname: string;

  constructor(nickname: string) {
    this.nickname = nickname;
  }
  
  introduce() {
    console.log(`์ œ ๋‹‰๋„ค์ž„์€ ${this.nickname} ์ž…๋‹ˆ๋‹ค.`);
  }
}

const a = new Play("TATA");
a.introduce(); // "์ œ ๋‹‰๋„ค์ž„์€ TATA ์ž…๋‹ˆ๋‹ค."

๐ŸงชType Aliases

type

type str = string;
type num = number;
type arr = string[];
type func = () => void;

// ์žฌ์‚ฌ์šฉ
type User = {
  nickname: str;
  age: num;
  playInfo: func;
}

๐ŸงชGeneric

์ œ๋„ค๋ฆญ

function User<T>(name: T): T {
  return name;
}

console.log(User<string>('TATA')) // "TATA" 
console.log(User<number>(142501)) // 142501  
console.log(User<string[]>(['TATA', 'CHIMMY'])) // ["TATA", "CHIMMY"]

-------
// type๊ณผ interface์—์„œ ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ๋ฒ•
type UserTypeFn = <T>(name: T) => T
interface UserInterFn {
  <T>(name: T): T;
}

-------
// class์—์„œ ์ œ๋„ค๋ฆญ ์‚ฌ์šฉ๋ฒ•
class User<T> {
  name: T
  
  constructor(name: T) {
  	this.name = name;
  }
}

// const a = new User<string>('TATA');
const a = new User('TATA');
console.log(a.name); // "TATA"

-------
// ์ œ๋„ค๋ฆญ extends ์‚ฌ์šฉ๋ฒ•
function User<T extends string | number>(name: T): T {
  return name;
}

// string๊ณผ numberํƒ€์ž…๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
console.log(User('TATA')); // "TATA" 
console.log(User('12546')); // "12546" 

๐Ÿงชtypeof

๋ณ€์ˆ˜, ํ•จ์ˆ˜, ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ถ”์ถœํ•œ๋‹ค.

let num = 10;
let numType: typeof num; // num ๋ณ€์ˆ˜์˜ ํƒ€์ž…์„ ์ถ”์ถœํ•˜์—ฌ ํ• ๋‹น

ํƒ€์ž… ๊ฐ€๋“œ๋กœ์„œ์˜ typeof

function printIfString(input: string | number) {
  if (typeof input === "string") {
    console.log(input.toUpperCase());
  }
}



๐Ÿฅฆtypescript์˜ class ์‚ฌ์šฉ๋ฒ• ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
๐Ÿ‘‰ TypeScript - Playground

profile
๐Ÿพ

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