λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

typescript

TypeScript / νƒ€μž… (1)

λ°°μ—΄

λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œκ°€ λ™μΌν•œ νƒ€μž…μ„ 갖도둝 λͺ…μ‹œ

=> λ°°μ—΄ λ‚΄λΆ€ μš”μ†Œμ˜ νƒ€μž… μ•ˆμ •μ„± 제곡

 

ν‘œν˜„ 방식

  1. νƒ€μž… μ–΄λ…Έν…Œμ΄μ…˜ : type[] (자주 μ‚¬μš©λ˜λŠ” ν‘œν˜„)
  2. μ œλ„ˆλ¦­ νƒ€μž… μ‚¬μš© : Array<type>
// λ°°μ—΄ νƒ€μž… 방법 1 : type[]
let nums: number[] = [1, 2, 3, 4, 5];
let strs: string[] = ['a', 'b', 'c'];
let bools: boolean[] = [false, false, true];

nums.push(6);
nums.push(7);
bools.push(true)

// λ¬Έμžμ—΄ νƒ€μž…μ„ 숫자 νƒ€μž…μ— ν• λ‹Ήν•  수 μ—†μŒ
// nums.push('8');
// num[0] = '1';
// bools.push(1)

// λ°°μ—΄ νƒ€μž… 방법 2 : Array<>
let nums1: Array<number> = [1, 2, 3, 4, 5];
let strs1: Array<string> = ['a', 'b', 'c'];
let nums: number[] = [1, 2, 3, 4, 5]
let color: string[]

 

  • 닀차원 λ°°μ—΄
let matrix: number[][] = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

 

  • ν˜Όν•© νƒ€μž… λ°°μ—΄
let mixedArray: (number | string)[] = [1, "two", 3, "four"];

 

 |  λŠ” μœ λ‹ˆμ˜¨ νƒ€μž…μœΌλ‘œ numberλ‚˜ string νƒ€μž… 쀑 ν•˜λ‚˜μž„μ„ μ˜λ―Έν•œλ‹€.

 

 


 

 

객체

객체의 ꡬ쑰 및 각 속성과 ν•΄λ‹Ή μ†μ„±μ˜ νƒ€μž…μ„ λͺ…μ‹œμ μœΌλ‘œ μ •μ˜

=> 객체의 ν˜•νƒœ/ꡬ쑰λ₯Ό 보μž₯ν•˜κ³  μ˜ˆμΈ‘ν•΄ μ˜ˆμƒμΉ˜ λͺ»ν•œ 값이 λ“€μ–΄κ°€λŠ” 것을 λ°©μ§€

interface font {
  fontFamily: string;
  fontSize: number;
  fontUnit?: 'px' | 'rem' | 'em'; 
  fontweight?: number;
  color: string;
  isUnderline: boolean;
}

let monitor: { brand: string; price: number };
monitor = {
  brand: 'LG',
  price: 120,
};

// νƒ€μž… 였λ₯˜
// monitor.price="123"
// monitor.displaySize="12inch"

 

객체의 Property νƒ€μž…

  • optional(μ˜΅μ…”λ„) : νŠΉμ • 속성이 ν•„μˆ˜κ°€ μ•„λ‹Œ μ„ νƒμ μž„μ„ ν‘œν˜„, 속성 이름 뒀에  μΆ”κ°€
  • readonly(읽기 μ „μš©) : 객체의 속성이 μˆ˜μ •λ˜μ§€ μ•Šμ•„μ•Ό ν•  λ•Œ μ‚¬μš©, 속성 μ΄λ¦„μ•žμ— readonly ν‚€μ›Œλ“œ μΆ”κ°€
// Optional property
let user: { id: string; name: string; age?: number };
user = {
  id: '12312',
  name: 'hykim',
  // ageλŠ” 선택적 속성
};

// Readonly property
let user1: { readonly id: string; name: string; age?: number };
user = {
  id: '12312',
  name: 'hykim',
};
user1.name = 'John';
// user1.id = '123123344'; // id 속성은 Readonly이기 λ•Œλ¬Έμ— κ°’ λ³€κ²½λΆˆκ°€

let apiconfig: {
  readonly clientKey: string;
  readonly url: string;
};

 

νƒ€μž… 별칭(Type Alias)

객체의 ꡬ쑰λ₯Ό μ •μ˜ν•˜κ³  μ •μ˜λœ ꡬ쑰에 이름을 λΆ€μ—¬ν•˜λŠ” λ°©λ²•μœΌλ‘œ type ν‚€μ›Œλ“œ μ‚¬μš©

// Type Alias
type UserType = {
  id: string;
  name: string;
  age: number;
};

let user1: UserType = {
  id: '1',
  name: 'John',
  age: 20,
};

let user2: UserType = {
  id: '2',
  name: 'Sarah',
  age: 25,
};

let users: UserType[];

users.push(user1);
users.push(user2);

// userType에 λ§žλŠ” ν˜•μ‹μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 였λ₯˜
users.push({});
users.push({ id: '1' });

 

  • Nested 객체
// Nested 객체 (쀑첩 객체)
type Payload = {
  timestamp: number;
  type: string;
  user: {
    id: string;
    isActive: boolean;
  };
};

const payload: Payload = {
  timestamp: 190678689,
  type: 'event',
  user: {
    id: '1234',
    isActive: true,
  },
};

 

 


 

 

ν•¨μˆ˜

ν•¨μˆ˜μ˜ νŒŒλΌλ―Έν„°(λ§€κ°œλ³€μˆ˜)와 λ°˜ν™˜κ°’μ— νƒ€μž… μ§€μ •

=> μ˜ˆμƒμΉ˜ λͺ»ν•œ νƒ€μž…μ˜ μΈμžκ°€ μ „λ‹¬λ˜κ±°λ‚˜ νƒ€μž…μ˜ 값이 λ°˜ν™˜λ˜λŠ” 것을 λ°©μ§€

=> ν•¨μˆ˜ μ‹œκ·Έλ‹ˆμ²˜λ‘œ ν•΄λ‹Ή ν•¨μˆ˜μ˜ μ‚¬μš©λ²•μ„ μžμ—°μŠ€λŸ½κ²Œ λ¬Έμ„œν™”

 

ν•¨μˆ˜μ˜ νƒ€μž… 

Parameter νƒ€μž…

ν•¨μˆ˜μ— μ „λ‹¬ν•˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ 데이터 νƒ€μž… 및 μ˜¬λ°”λ₯Έ 개수 전달 확인

// Parameter
function add(x: number, y: number): number {
  return x + y;
}
add(1, 1);
const result = add(10, 5);

// quantity에 κΈ°λ³Έκ°’ λΆ€μ—¬
function addToCart(name: string, price: number, quantity: number = 1) {
  return `${name}, ${price}, ${quantity}`;
}

addToCart('orange', 100); // 'orange, 100, 1' λ°˜ν™˜
addToCart('greentea', 50, 4);

 

 

Optional Parameter νƒ€μž…

ν•¨μˆ˜μ— ν•„μˆ˜κ°€ μ•„λ‹Œ 선택적 λ§€κ°œλ³€μˆ˜ μ§€μ • κ°€λŠ₯

function addToCart(name: string, price: number, quantity?: number) {
  return `${name}, ${price}, ${quantity}`;
  // if문으둜 quantity 값이 μžˆμ„ κ²½μš°μ™€ 없을 경우둜 μ²˜λ¦¬ν•˜κ±°λ‚˜
  // μ•„λž˜μ²˜λŸΌ quantity에 νƒ€μž…μ—°μ‚°μžλ‘œ μ²˜λ¦¬ν•΄μ€„ 수 μžˆλ‹€.
  // return `${name}, ${price}, ${quantity || 1}`;
}

addToCart('orange', 100); // 'orange, 100' λ°˜ν™˜
addToCart('greentea', 50, 4);

 

 

Contextual νƒ€μž…

ν•¨μˆ˜μ˜ λ§₯락에 따라 μžλ™μœΌλ‘œ νƒ€μž…μ„ μΆ”λ‘ 

map(), reduce(), filter(), forEach() 같은 λ°°μ—΄ λ©”μ†Œλ“œμ˜ μ½œλ°±ν•¨μˆ˜μ—μ„œ 주둜 μ‚¬μš©ν•˜κ³ ,

콜백의 인자인 element의 νƒ€μž…μ€ λ°°μ—΄μ˜ μš”μ†Œ νƒ€μž…μ„ κΈ°μ€€μœΌλ‘œ μžλ™ 좔둠됨

const numbers: number[] = [1, 2, 3, 4, 5];
const letters: string[] = ['a', 'b', 'c', 'e'];

numbers.map((el) => {
  el.toFixed(2);
});

letters.forEach((letter) => {
  letter.toUpperCase();
});

 

 

Return νƒ€μž…

ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” κ°’μ˜ 데이터 νƒ€μž… λͺ…μ‹œ

function addTwoValue(x: number, y: number): string {
  return `${x}${y}`;
}

function addToNumbers(x: number, y: number): number {
  return x + y;
}

function isTen(x: number, y: number): boolean {
  return x + y === 10;
}

// ν™”μ‚΄ν‘œ ν•¨μˆ˜
const add = (x: number, y: number): number => {
  return x + y;
};

 

 

void λ°˜ν™˜ νƒ€μž…

ν•¨μˆ˜κ°€ λͺ…μ‹œμ μœΌλ‘œ 값을 λ°˜ν™˜ν•˜μ§€ μ•ŠμŒμ„ ν‘œν˜„

 

never λ°˜ν™˜ νƒ€μž…

ν•¨μˆ˜κ°€ 값을 λ°˜ν™˜ν•˜μ§€ μ•ŠμŒμ„ μ—„κ²©ν•˜κ²Œ ν‘œν˜„

// void, never
function logMessage(message: string): void {
  console.log(message);
}

function throwError(message: string): never {
  throw new Error(message);
}

 

 


 

 

μœ λ‹ˆμ–Έ νƒ€μž…(Union Types)

μ—¬λŸ¬ νƒ€μž… 쀑 ν•˜λ‚˜κ°€ 될 수 μžˆλŠ” 값을 ν‘œν˜„ν•˜λ©°, μ§‘ν•© 이둠의 ν•©μ§‘ν•©κ³Ό λ™μΌν•œ κ°œλ…

μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ 값을 ν•˜λ‚˜μ˜ λ³€μˆ˜μ— ν• λ‹Ήν•  수 있으며  λ₯Ό μ‚¬μš©

let userId: string | number;

userId = 1;
userId = '123129afds';

// νƒ€μž…μ—λŸ¬ λ°œμƒ
userId = true;
userId = {};

function printUserId(id:string|number){
    console.log(id)
}

printUserId("1") // "1"
printUserId(1) // 1

 

 

Type Narrowing

μœ λ‹ˆμ–Έ νƒ€μž…μ˜ ꡬ체적인 ν•˜μœ„ νƒ€μž…μ„ μ’ν˜€λ‚˜κ°€λŠ” 방식, νƒ€μž… μ’νžˆκΈ°λΌκ³ λ„ 함

function processValue(value: number | string) {
    // λ¬Έμžμ—΄μ˜ 경우
    if (typeof value === 'string') {
        return value.toUpperCase()
    }
    // 숫자의 경우
    return value.toString().toUpperCase();
}

 

 

λ°°μ—΄

μ„œλ‘œ λ‹€λ₯Έ νƒ€μž…μ˜ μš”μ†Œλ₯Ό 포함할 수 μžˆλŠ” 배열을 μ •μ˜ν•΄ μœ μ—°μ„± 증가

// λ°°μ—΄ μ˜ˆμ‹œ
let mixedValues: (string | number)[] = [];
mixedValues.push("100")
console.log(mixedValues)
mixedValues.push(100)
console.log(mixedValues)

 

 

λ¦¬ν„°λŸ΄

μ œν•œλœ 값을 κ°€μ§„ νƒ€μž…(νŠΉμ • λ¬Έμžμ—΄ / 숫자의 μ§‘ν•©)을 ν‘œν˜„

const toggle = (option: "on" | "off") => {
    console.log(option)
}

toggle("on")
toggle("off")
// toggle("adfasdf") // νƒ€μž…μ—λŸ¬

// ---------------------------

type Size = "xs" | "s" | "m" | "l" | "xl"
let tShirtSize: Size;
tShirtSize = "m"
// tShirtSize = "xxl" // νƒ€μž…μ—λŸ¬

// ν•¨μˆ˜ νŒŒλΌλ―Έν„° μ‚¬μš©
function setSize(size: Size) {
    switch (size) {
        case "xs": break;
        case "s": break;
        case "m": break;
    }
}

// ---------------------------

type SuccessCode = 200 | 201 | 202
type ErrorCode = 500 | 501 | 503

let responseCode: SuccessCode | ErrorCode
responseCode = 200
responseCode = 503
responseCode = 404 // νƒ€μž… μ—λŸ¬

'typescript' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

TypeScript / μ œλ„€λ¦­  (2) 2025.06.05
TypeScript / 클래슀  (0) 2025.06.05
TypeScript / νƒ€μž… μΆ”λ‘ , νƒ€μž… 단언  (0) 2025.06.05
TypeScript / νƒ€μž…(2)  (0) 2025.06.04
TypeScript / κ°œμš”  (0) 2025.06.02