์ƒˆ์†Œ์‹

FrontEnd/TypeScript

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

  • -

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


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

 

 

ํ˜น์‹œ ์ง€๋‚œ ๊ฒŒ์‹œ๋ฌผ์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?
 

[TypeScript] Narrowing ๊ณผ Assertion

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!์ด๋ฒˆ์—๋Š” Narrowing & Assertion์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณผ ๊ฒƒ์ด๋‹ค. ํ˜น์‹œ ์ง€์ง€๋‚œ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋‹ค๋ค˜๋˜ union type์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋˜ ๋ถ€๋ถ„๋“ค์„ ๊ธฐ์–ต ํ•˜๋Š”์ง€?!?! ๋Œ€๋žต ์•„๋ž˜์™€ ๊ฐ™์€ ์ฝ”๋“œ์˜€๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ

haileyham.tistory.com

๊ฐ์ฒด์˜ ํƒ€์ž… 2ํƒ„ interface ๊ธ€์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?
 

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

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

haileyham.tistory.com

 

 

๐Ÿฃ ๊ฐ์ฒด์˜ ํƒ€์ž…


1. ๊ฐœ๋…

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

 

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

์•„๋ž˜์˜ ์ฝ”๋“œ์—์„œ๋Š” type alias(ํƒ€์ž…๋ณ€์ˆ˜)๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ํƒ€์ž…์„ ์ •์˜ํ–ˆ์Œ.

// ์˜ˆ์ œ: ์‚ฌ์šฉ์ž ๊ฐ์ฒด์˜ ํƒ€์ž… ์ •์˜
type User = {
    name: string;
    age: number;
    isAdmin: boolean;
};

// User ํƒ€์ž…์„ ๊ฐ€์ง„ ๊ฐ์ฒด ์ƒ์„ฑ
let user: User = {
    name: "Alice",
    age: 30,
    isAdmin: true
};

console.log(user.name); // "Alice"
console.log(user.isAdmin); // true

 

๋งŒ์•ฝ ํƒ€์ž…๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋ชจ๋ฅธ๋‹ค๋ฉด ์•„๋ž˜ ์ •๋ฆฌ๊ธ€ ์ฐธ๊ณ !_! 
 

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

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

haileyham.tistory.com

 

 

๐Ÿฃ readonly


1. ๊ฐœ๋…

readonly ํ‚ค์›Œ๋“œ๋Š” ๋ณ€์ˆ˜๋‚˜ ์†์„ฑ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ’์ด ํ•œ ๋ฒˆ ํ• ๋‹น๋˜๋ฉด ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋จ.

 

2. ํŠน์ง•

const ๊ฐ์ฒด ์žฌํ• ๋‹น์„ ๋ชปํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Œ! const ๋ณ€์ˆ˜๋Š” ๋“ฑํ˜ธ๋กœ ์žฌํ• ๋‹น ๋ง‰๋Š”๋ฐ, ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ์ˆ˜์ •์ด ์ž์œ ๋กญ๊ฒŒ ๊ฐ€๋Šฅํ•จ

* ์ฐธ๊ณ  : ๊ฐ์ฒด ์žฌํ• ๋‹น ๋˜๋Š” ์ด์œ ๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ์ฃผ์†Œ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ , ๊ฐ์ฒด๋ฅผ ์žฌํ• ๋‹น ํ•  ๊ฒฝ์šฐ ์ฃผ์†Œ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ. ๊ทธ๋ž˜์„œ const ํ‚ค์›Œ๋“œ ์„ ์–ธ ํ›„์— ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
const ์ถœ์ƒ์ง€์—ญ = { region: 'seoul' }
์ถœ์ƒ์ง€์—ญ.region = 'universe'

// readonly ์‚ฌ์šฉํ•˜์—ฌ object ์ž๋ฃŒ ์ˆ˜์ • ๋ง‰๊ธฐ
type Animal2 = {
    readonly name : string //์‹ค์ˆ˜๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์—๋Ÿฌ๋ฐœ์ƒ์‹œํ‚ด
}

const ๋™๋ฌผ2 : Animal2 = {
    name : 'cat'
}

 

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

// readonly ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์ˆ˜๋ฅผ ์ •์˜
const PI: number = 3.14;
console.log(PI);

// readonly๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด์˜ ์†์„ฑ์„ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์ •์˜
type Circle = {
    readonly radius: number;
};

let circle: Circle = { radius: 10 };
console.log(circle.radius);

// ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ
// circle.radius = 20; // Error: Cannot assign to 'radius' because it is a read-only property

 

 


 

 

์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์— readonly๋ฅผ ์‚ฌ์šฉํ•œ ๊ธฐ์–ต์ด ๋‚˜๋Š”๊ตฌ๋งŒ..

 

 

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

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

haileyham.tistory.com

 

Contents

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

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