์ƒˆ์†Œ์‹

FrontEnd/TypeScript

[TypeScript] ๊ฐ์ฒด์˜ ํƒ€์ž… interface

  • -

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!


์ด๋ฒˆ์—๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž… 2ํƒ„์ธ ๊ฒƒ์ธ๊ฐ€! ์ง€๋‚œ๋ฒˆ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ •๋ฆฌํ•  ๋•Œ๋Š” readonly์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹ค๋ค˜์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” interface์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด์ž

 

 

๊ฐ์ฒด์˜ ํƒ€์ž… ๊ธฐ๋ณธ๊ฐœ๋…๊ณผ readonly์— ๋Œ€ํ•œ ์ •๋ฆฌ๊ธ€
 

[TypeScript] ๊ฐ์ฒด์˜ ํƒ€์ž…๊ณผ readonly

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!๊ฐ์ฒด์—๋„ ํƒ€์ž…์ด ์กด์žฌํ•œ๋‹ค!_! ๋‹น์—ฐํ•œ ์‚ฌ์‹ค..! ๋šœ๋‘ฅ! ๊ทธ๋Ÿฌ๋ฉด ์ด๋ฒˆ์—๋Š” ๊ฐ์ฒด์˜ ํƒ€์ž…๊ณผ readonly์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž!_! ๊ฐ„๋‹จํ•˜๋‹ˆ ์งง์€ ๊ธ€์ด ๋˜๊ฒ ๋”ฐ!  ํ˜น์‹œ ์ง€๋‚œ ๊ฒŒ์‹œ๋ฌผ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด

haileyham.tistory.com

 

 

๐Ÿฃ interface


1. ๊ฐœ๋…

๊ฐ์ฒด์— ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ. TypeScript์—์„œ ๊ฐ์ฒด(Object)์˜ ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ •์˜ํ•˜์—ฌ ํƒ€์ž…์„ ์„ ์–ธํ•˜๋Š” ๋„๊ตฌ. ์ฝ”๋“œ์—์„œ ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ •์˜ํ•œ ์†์„ฑ๊ณผ ํƒ€์ž…์„ ์ค€์ˆ˜ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ํ•จ.

 

2. ํŠน์ง•

  • interface์˜ extends / type์˜ &(intersection) : extends๋Š” ๋ณต์‚ฌ, &๋Š” ์กฐ๊ฑด ๋งŒ์กฑ
  • ์ค‘๋ณต ์„ ์–ธ ์—ฌ๋ถ€ : interface ๊ฐ€๋Šฅ / type ๋ถˆ๊ฐ€๋Šฅ : interface์˜ ๊ฒฝ์šฐ ์ค‘๋ณต ์„ ์–ธ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ฉ์ณ์ง€๋Š” ๊ฐœ๋…
  • ์ค‘๋ณต ์†์„ฑ ์—๋Ÿฌ ๋ฐœ์ƒ ์—ฌ๋ถ€ : interface์˜ ๊ฒฝ์šฐ extend ์ค‘๋ณต ์†์„ฑ ๋ฐœ์ƒ์‹œ ๋ฐ”๋กœ ์—๋Ÿฌ ์ฒ˜๋ฆฌ / type์˜ ๊ฒฝ์šฐ ๋ฐ”๋กœ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์•ˆํ•˜๊ณ  ์ถ”ํ›„ ์„ ์–ธํ›„ ํ• ๋‹น๋•Œ ๋ฐœ์ƒ 

 

3. ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ

interface์™€ type alias ๋น„๊ต

type alias์—์„œ {} ๊ฐ์ฒด๋กœ ์ง‘์–ด ๋„ฃ๋˜ ๊ฒƒ์„ interface์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ์Œ.

// type alias
type Square = { color: string, width: number };

//์—ฌ๊ธฐ์„œ๋Š” ์œ„์— type๊ณผ ๋™์ผ
interface Square { 
    color: string,
    width: number
};

let ๋„ค๋ชจ: Square = { color: 'red', width: 100 };

 

interface

// ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜
interface User {
    name: string;  // ์ด๋ฆ„ ์†์„ฑ์€ ๋ฌธ์ž์—ด ํƒ€์ž…
    age: number;   // ๋‚˜์ด ์†์„ฑ์€ ์ˆซ์ž ํƒ€์ž…
    isAdmin: boolean;  // isAdmin ์†์„ฑ์€ ๋ถˆ๋ฆฌ์–ธ ํƒ€์ž…
}

// ์‚ฌ์šฉ์ž ๊ฐ์ฒด ์ƒ์„ฑ
let user: User = {
    name: "Alice",
    age: 30,
    isAdmin: true
};

console.log(user.name);  // ์ถœ๋ ฅ: Alice

 

 

 

๐Ÿฃ interface ์™€ type alias์˜ ์ฐจ์ด


0. ๊ธฐ๋ณธ ์ฝ”๋“œ

๋‹ค์Œ์˜ ๊ธฐ๋ณธ ์ฝ”๋“œ๋กœ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Œ!_!

interface Student {
    name: string;
}
interface Teacher{
    name: string,
    age : number
}

let ํ•™์ƒ:Student = { name: 'ham' }
let ์„ ์ƒ:Teacher = { name : 'hailey', age : 20}

 

์ฐธ๊ณ ๋กœ type alias์— ๋Œ€ํ•ด ํ—ท๊ฐˆ๋ฆฌ๋‹ค๋ฉด ๋‹ค์Œ ์ •๋ฆฌ๊ธ€ ์ฐธ๊ณ !
 

[TypeScript] ํƒ€์ž… ๋ณ€์ˆ˜ type alias

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!์ด๋ฒˆ์—” type alias์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. ์‚ฌ์‹ค type alias๋ผ๊ณ  ํ•˜๋ฉด ์œผ์ž‰? ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋“ค ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ type์„ ๋ณ€์ˆ˜์— ๋‹ด์•„ ์‚ฌ

haileyham.tistory.com

 

1. extends / &(intersection)

interface (extends)

interface์˜ ์žฅ์ ์€ extends๋กœ ๋ณต์‚ฌ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” 

 

์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ ์‚ดํŽด๋ณด๋ฉด, interface Student1 ํƒ€์ž…์„ extends ๋กœ ๋ณต์‚ฌํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Œ.

๊ทธ๋Ÿฌ๋ฉด Teacher1์˜ ํƒ€์ž…์€ name:string, age:number ๋˜๋Š” ๊ฒƒ!

interface Student1 {
    name: string;
}
interface Teacher1 extends Student1{ // extends
    age : number
}

let ํ•™์ƒ1:Student = { name: 'ham' }
let ์„ ์ƒ1:Teacher = { name : 'hailey', age : 20}

 

type alias ( & : intersection type)

interface์˜ extends๋ž‘ ๋‹ค๋ฅธ์  : &(intersection type)์€ ๋‘ ํƒ€์ž…์„ ์ „๋ถ€ ๋งŒ์กฑํ•˜๋Š” ํƒ€์ž…
interface์˜ extends๋Š” ๋ณต์‚ฌ์˜ ๊ฐœ๋…

 

์•„๋ž˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์ „์ฒด๋ฅผ ๋‹ค ๋งŒ์กฑํ•˜๋Š” ๊ฐœ๋…์ด๋ผ ์ƒ๊ฐํ•˜๋ฉด ๋จ

type Student2 = { name: string };
type Teacher2 = { age: number } & Student2;

 

 

2. ์ค‘๋ณต ์„ ์–ธ

interface (์ค‘๋ณต ์„ ์–ธ ๊ฐ€๋Šฅ(ํ•ฉ์ณ์ง))

  • ์ค‘๋ณต ์„ ์–ธ์ด ๊ฐ€๋Šฅ
  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฐ™์€ ๊ฒฝ์šฐ interface ๋งŽ์ด ์‚ฌ์šฉ
  • ์ถ”ํ›„ ํƒ€์ž…์— ์–ด๋–ค ๊ฒƒ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์šฉ์ด
  • ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด์šฉ ๋งŽ์ด ํ•  ๊ฒƒ ๊ฐ™์€ object ํƒ€์ž… ์ •ํ•  ๋•Œ interface ์‚ฌ์šฉ ๊ฐ€๋Šฅ
interface StudentTest{
    name: string;
}

interface StudentTest{
    score: number;
}

let ํ•™์ƒTest: StudentTest = { name: 'ham', score: 100 };

 

 

type alias (์ค‘๋ณต ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ)

๋‹ค์Œ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ error

type StudentTest2 = { name: string };
type StudentTest2 = { score: number }; //error ์ค‘๋ณต ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ

 

 

๋งŒ์•ฝ extends ์‚ฌ์šฉ์‹œ ์ค‘๋ณต ์†์„ฑ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ? 

์—๋Ÿฌ๊ฐ€ ๋จ

interface StudentTest3{
    name: string;
}

interface TeacherTest3 extends StudentTest3{
    name: string; // ๋˜‘๊ฐ™์•„์„œ ใ„ฑใ…Š
    name: number; // extends๋กœ ๊ฐ€์ ธ์˜จ๊ฒƒ์— name : string ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— name:number๋ถˆ๊ฐ€
}

 

 

type alias ์—์„œ & ์‚ฌ์šฉํ•  ๋•Œ ์ค‘๋ณต ์†์„ฑ ๋ฐœ์ƒํ•˜๋ฉด?

๋ฏธ๋ฆฌ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์•„์„œ ์ฃผ์˜!

  •  & : ํ•ฉ์น˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ์™ผ,์˜ค๋ฅธ์ชฝ ๋‘˜๋‹ค ๋งŒ์กฑํ•˜๋Š” ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ
  • name์ด name์ด๊ณ  number์ด๊ณ  ๋‘˜๋‹ค ๋งŒ์กฑํ•  ์ˆ˜๋Š” ์—†์Œ
type StudentTest4 = { name: string };
type StudentTest55 = { name: number } & StudentTest4; //์—ฌ๊ธฐ์„œ๋Š” ์—๋Ÿฌ ๋ฐœ์ƒ ์•ˆํ•จ

// let ํ•™์ƒTest1: StudentTest55 = { name: 'ham' }; //์—ฌ๊ธฐ name์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ

interface๋„๋งŽ์ด์“ฐ๊ฒŒ๋˜์ง•~

 

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

[TypeScript] class type  (0) 2024.06.20
[TypeScript] ํ•จ์ˆ˜์˜ ํƒ€์ž… 2ํƒ„!_!  (0) 2024.06.20
[TypeScript] Literal Types  (0) 2024.06.20
[TypeScript] ํƒ€์ž… ๋ณ€์ˆ˜ type alias  (0) 2024.06.20
[TypeScript] ๊ฐ์ฒด์˜ ํƒ€์ž…๊ณผ readonly  (0) 2024.06.20
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.