πŸ“ŒΒ νƒ€μž…μ„ ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°μ²˜λŸΌ μ‚¬μš©ν•˜λŠ” 문법

νƒ€μž…μ„ λ„˜κ²¨ νƒ€μž…μ„ λ°›λŠ”λ‹€.

μ œλ„€λ¦­μ„ μ΄μš©ν•˜λ©΄ classλ‚˜ ν•¨μˆ˜, interfaceλ₯Ό λ‹€μ–‘ν•œ type으둜 μž¬μ‚¬μš©ν•  수 μžˆλ‹€.

μ„ μ–Έν•  땐, type νŒŒλΌλ―Έν„°λ§Œ 적어주고

μƒμ„±ν•˜λŠ” μ‹œμ μ—μ„œ μ‚¬μš©ν•˜λŠ” type을 κ²°μ •ν•œλ‹€.

✏️ EX 1)

function getText<T>(text: T) {
	return text;
}
const message = getText<string>('hi');
const useId = getText<number>(100);

✏️ EX 2)

❌
interface Person {
  name: string;
  age: number;
}

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

interface Id {
  name: string;
  age: boolean;
}

const jane: Person = {
  name: 'Jane',
  age: 11,
}

const tom: User = {
  name: 'Tom',
  age: '11'
}

const peter: Id = {
  name: 'Peter',
  age: true,
}

⭕️
interface Anyone <T> {
	name: string;
	age: T;
}

const mac: Anyone<number> = {
	name: 'Mac',
	age: 10,
} 

const jerry: Anyone<string> = {
	name: 'Jerry',
	age: '12',
}

const trudy: Anyone<boolean> = {
	name: 'Trudy',
	age: true,
}

✏️ EX 3)

❌
function getSize(arr: number[] | string[] | boolean[] | object[]):number {
  return arr.length
}

const arr1 = [1, 2, 3];
getSize(arr1) //3

const arr2 = ["a", "b", "c"];
getSize(arr2)

const arr3 = [false, true, false];
getSize(arr3)

const arr4 = [{}, {}, {name: "Tom"}];
getSize(arr4)

μœ λ‹ˆμ˜¨ νƒ€μž…μ„ μ΄μš©ν•˜μ—¬ νƒ€μž…μ„ λŠ˜λ €κ°€λŠ”κ±΄ μ’‹μ§€ μ•Šμ€ μ½”λ“œμ΄λ‹€.(μž¬μ‚¬μš©μ„± μΈ‘λ©΄)

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)

const arr3 = [false, true, false];
getSize<boolean>(arr3)

const arr4 = [{}, {}, {name: "Tom"}];
getSize<object>(arr4)
interface Mobile<T> {
  name: string;
  price: number;
  option: T;
}

const m1: Mobile<{color: string, coupon: boolean}> = {
  name: "s21",
  price: 1000,
  option: {
    color: "black",
    coupon: false
  }
}

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