๐Ÿ”ทTypeScript

์›์˜ยท2023๋…„ 11์›” 13์ผ
0
post-thumbnail

๐Ÿ”ทTypeScript

  • JavaScript : ๋Ÿฐํƒ€์ž„์— ํƒ€์ž… ๊ฒฐ์ •, ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ
  • TypeScript : ์ปดํŒŒ์ผ ํƒ€์ž„์— ํƒ€์ž… ๊ฒฐ์ •, ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ์œผ๋กœ ์•ˆ์ •์ ์ธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

๐Ÿ”ทํƒ€์ž… ์ข…๋ฅ˜

โœ”๏ธtuple

  • ์ธ๋ฑ์Šค ๋ณ„๋กœ ํƒ€์ž…์ด ๋‹ค๋ฅผ ๋•Œ ์‚ฌ์šฉ
let tuple:[number, string];
tuple = [1, 'abc']; 
// ์—๋Ÿฌ
// tuple = ['abc', 1];

โœ”๏ธenum

  • ๋น„์Šทํ•œ ๊ฐ’ ๋ผ๋ฆฌ์˜ ๋ฌถ์Œ
  • ๊ฐ’ ํ• ๋‹นํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด ์ˆœ์„œ๋Œ€๋กœ ์ˆซ์ž 0๋ถ€ํ„ฐ ํ• ๋‹น๋˜๊ณ , ์–‘๋ฐฉํ–ฅ ๋งตํ•‘ ๊ฐ€๋Šฅ
  • ๊ฐ’ ํ• ๋‹นํ•˜๋ฉด ํ•ด๋‹น ๊ฐ’์œผ๋กœ ํ• ๋‹น๋˜๊ณ , ๋‹จ๋ฐฉํ–ฅ ๋งตํ•‘๋งŒ ๊ฐ€๋Šฅ
enum NickName {
  Sophia = 'Sop',
  James = 'Jam',
  Amy = 'Amy',
}

let nick:NickName = NickName.Sophia;

๐Ÿ”ทinterface

โœ”๏ธobject ํƒ€์ž…

  • ํƒ€์ž…์„ object๋กœ ์ง€์ • ํ›„ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ์‹œ,
    object์—๋Š” ํŠน์ • ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†์–ด์„œ ์—๋Ÿฌ ๋ฐœ์ƒ
let user:object;
user = {
  name: 'abc',
  age: 20,
}
// ์—๋Ÿฌ : user.name ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
// user.name
  • ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” interface ์‚ฌ์šฉ
interface User {
  name: string;
  age: number;
}
let user : User = {
  name: 'abc',
  age: 20,
}
// ์ ‘๊ทผ ๊ฐ€๋Šฅ
user.name

โœ”๏ธinterface ํŠน์ง•

  • object, ํ•จ์ˆ˜, class ๋“ฑ ๊ฐ์ฒด์˜ ๊ตฌ์กฐ ์ •์˜
  • extends ํ‚ค์›Œ๋“œ๋กœ interface๊ฐ„ ์ƒ์†(ํ™•์žฅ)
  • implements ํ‚ค์›Œ๋“œ๋กœ class ๊ตฌํ˜„

โœ”๏ธ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ฒ˜

  • ๊ฐ์ฒด๊ฐ€ ํƒ€์ž…์„ ๋ช…์‹œํ•ด์•ผ ํ•˜๋Š” ์—ฌ๋Ÿฌ key์™€ ๋งคํ•‘๋˜๋Š” value ๊ฐ€์งˆ ๋•Œ ์‚ฌ์šฉ
// key ํƒ€์ž…์ด number์ด๊ณ  value ํƒ€์ž…์ด string์ธ ํ”„๋กœํผํ‹ฐ๋Š” ๋ชจ๋‘ ํ—ˆ์šฉ
interface User {
  [grade:number]: string;
}

๐Ÿ”ทtype

  • ์œ„ ๊ฒฝ์šฐ ํ—ˆ์šฉ๋˜๋Š” ๊ฐ’์ด ๋„ˆ๋ฌด ๊ด‘๋ฒ”์œ„
  • ์ด ๋•Œ type ํ‚ค์›Œ๋“œ๋กœ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ์‚ฌ์šฉํ•ด์„œ ํ—ˆ์šฉ๋œ ๊ฐ’๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ •
type Score = 'A' | 'B' | 'C' | 'F';

interface User {
  [grade: number]: Score;
}

๐Ÿ”ทํ•จ์ˆ˜

โœ”๏ธ์˜ค๋ฒ„๋กœ๋“œ

interface User {
  name: string;
  age: number;
}

// ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ : ์ด ๋ถ€๋ถ„ ์—†์œผ๋ฉด ์—๋Ÿฌ
// ์ „๋‹ฌ๋ฐ›์€ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐœ์ˆ˜, ํƒ€์ž…์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋™์ž‘ ์ˆ˜ํ–‰
function join(name:string, age:number):User
function join(name:string, age:string):string

function join(name: string, age: number | string): User | string {
  if (typeof age == 'number') {
    return {
      name,
      age,
    };
  } else {
    return '๋‚˜์ด ์ˆซ์ž๋กœ ์ž…๋ ฅ';
  }
}


// 'ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ' ์—†์œผ๋ฉด ์—๋Ÿฌ
// Sam, Jane์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๊ฐ๊ฐ User, string ์ด๋ผ๊ณ  ํ™•์‹ ํ•  ์ˆ˜ ์—†์Œ
const Sam: User = join('Sam', 10);
const Jane: string = join('Jane', '10');

// ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ๋กœ ํ•ด๊ฒฐ
  • ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ ๋ถ€๋ถ„์ด ์—†์œผ๋ฉด join()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ํƒ€์ž…์ด User์ธ์ง€ string์ธ์ง€ ํ™•์‹ ํ•  ์ˆ˜ X
  • ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ํƒ€์ž…์— ๋”ฐ๋ผ์„œ ๋ฐ˜ํ™˜ ๊ฐ’์˜ ํƒ€์ž… ๋ช…์‹œํ•ด์ฃผ๋Š” ์˜ค๋ฒ„๋กœ๋“œ ๋ถ€๋ถ„ ํ•„์š”

๐Ÿ”ทํด๋ž˜์Šค

โœ”๏ธ์ƒ์„ฑ

class Car {
  color: string;	// ์ด ๋ถ€๋ถ„ TypeScript์—์„œ๋Š” ํ•„์ˆ˜
  constructor(color: string) {
    this.color = color;
  }
}
  • JavaScript ์—์„œ๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜์—์„œ ๋ฐ”๋กœ this.ํ”„๋กœํผํ‹ฐ๋ช…์„ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์€ ์—๋ŸฌX
  • TypeScript ์—์„œ ํ”„๋กœํผํ‹ฐ ๋ณ€์ˆ˜๋Š” ๋ฏธ๋ฆฌ ์„ ์–ธํ•ด์•ผ ํ•จ
  • ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ , public, readonly๋ฅผ ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋ถ™์—ฌ์ค˜๋„ ๋จ
class Car {
  constructor(public color: string) {
    this.color = color;
  }
}
class Car {
  constructor(readonly color: string) {
    this.color = color;
  }
}

โœ”๏ธ์ ‘๊ทผ ์ œํ•œ์ž

  • public
    • ๊ธฐ๋ณธ๊ฐ’
    • ์ž์‹ ํด๋ž˜์Šค, ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • protected
    • ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์—์„œ๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
  • private
    • ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • #๋ณ€์ˆ˜๋ช…๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ

๐Ÿ”ท์ œ๋„ค๋ฆญ

  • ํด๋ž˜์Šค, ํ•จ์ˆ˜, interface ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์„ ์–ธ ์‹œ์ ์— ํƒ€์ž…์„ ๋ณ€์ˆ˜๋กœ ์ ์–ด๋‘๊ณ , ์ƒ์„ฑ ์‹œ์ ์— ๊ฒฐ์ •

โœ”๏ธํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ

function getSize<T>(arr: T[]): number {
  return arr.length;
}

const arr1 = [1, 2, 3];
getSize<number>(arr1);

const arr2 = ['a', 'b', 'c'];
getSize<string>(arr2);

// <T> ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ํƒ€์ž… ๋ถ€์—ฌ
const arr3 = [false, true, true];
getSize(arr3);

โœ”๏ธinterface์—์„œ ์‚ฌ์šฉ

interface Mobile<T> {
  name: string;
  price: number;
  option: T;
}

// const m1:Mobile<object>
const m1: Mobile<{ color: string; coupon: boolean }> = {
  name: 'm1',
  price: 1000,
  option: {
    color: 'pink',
    coupon: false,
  },
};

const m2: Mobile<string> = {
  name: 'm2',
  price: 2000,
  option: 'good',
};

โœ”๏ธ์ œ๋„ค๋ฆญ์„ ํ™œ์šฉํ•œ ํƒ€์ž… ์ถ”์ƒํ™”

  • Pick<T, K>
    • Pick์€ ๊ฐ์ฒด ํƒ€์ž… T์—์„œ ํŠน์ • ์†์„ฑ๋“ค๋งŒ ์„ ํƒํ•˜์—ฌ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

      type MyType = {
      	name: string;
      	age: number;
      	address: string;
      };
      type SelectedType = Pick<MyType, 'name' | 'age'>;
      // SelectedType: { name: string; age: number; }
    • SelectedType์€ MyType์—์„œ 'name'๊ณผ 'age' ์†์„ฑ๋งŒ์„ ์„ ํƒํ•œ ์ƒˆ๋กœ์šด ํƒ€์ž…

  • Omit<T, K>
    • ๊ฐ์ฒด ํƒ€์ž… T์—์„œ ํŠน์ • ์†์„ฑ๋“ค์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ๋“ค๋กœ ์ƒˆ๋กœ์šด ํƒ€์ž…์„ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉ

    • Pick์˜ ๋ฐ˜๋Œ€ ๊ฐœ๋…

      type MyType = {
      	name: string;
      	age: number;
      	address: string;
      };
      
      type NewType = Omit<MyType, 'address'>;
      // NewType: { name: string; age: number; }
    • NewType์€ MyType์—์„œ 'address' ์†์„ฑ์„ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์†์„ฑ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ƒˆ๋กœ์šด ํƒ€์ž…

๐Ÿ”ทํƒ€์ž… ์–ด์„ค์…˜(๋‹จ์–ธ)

  • ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ๋ณ€์ˆ˜๋‚˜ ํ‘œํ˜„์‹์˜ ํƒ€์ž…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •
    • angle-bracket ๋ฌธ๋ฒ• <ํƒ€์ž…>
      let someValue: any = "this is a string";
      let strLength: number = (<string>someValue).length;
    • as ๋ฌธ๋ฒ•
      let someValue: any = "this is a string";
      let strLength: number = (someValue as string).length;
    • someValue๋ฅผ string์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ํƒ€์ž… ์ง€์ •
profile
ํ™”์ดํŒ…~~^ใ…^/

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