Skip to Content
Sunbeen's Blog
Documents๊ตฌ TypescriptBasic_Grammer08. ๐ŸŸฆ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… ๊ฐ€๋“œ

08. ๐ŸŸฆ ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… ๊ฐ€๋“œ

๐Ÿ“Œ 0.typeof, instanceof?

๐Ÿ” 1. typeof

โœ… ๊ฐœ๋…: ๊ธฐ๋ณธ ํƒ€์ž…(number, string, boolean, undefined, symbol, bigint, function, object)์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Œ

์›์‹œ ๊ฐ’(primitive value)์— ์ฃผ๋กœ ์‚ฌ์šฉ

typeof 123; // "number" typeof "hello"; // "string" typeof true; // "boolean" typeof undefined; // "undefined" typeof Symbol(); // "symbol" typeof BigInt(1); // "bigint" typeof function () {}; // "function" typeof {}; // "object" typeof null; // "object" โ—๏ธ (๋ฒ„๊ทธ์ด์ž ์—ญ์‚ฌ์  ์œ ์‚ฐ)

๐Ÿ” 2. instanceof

โœ… ๊ฐœ๋…: ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•  ๋•Œ ์‚ฌ์šฉ

ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์„ ๋”ฐ๋ผ ํ™•์ธ

โœ… ์‚ฌ์šฉ ์˜ˆ:

class Person {} const p = new Person(); p instanceof Person // true [] instanceof Array // true [] instanceof Object // true (Array๋Š” Object๋ฅผ ์ƒ์†) null instanceof Object // false โ—๏ธ function Dog() {} const d = new Dog(); d instanceof Dog // true

๐Ÿ“Œ 1. ํƒ€์ž… ๊ฐ€๋“œ๋ž€?

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์—์„œ ์œ ๋‹ˆ์˜จ ํƒ€์ž…์„ ๋ถ„๊ธฐํ•ด์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ขํžˆ๋Š” ๋กœ์ง
    • ๋Œ€ํ‘œ์ ์ธ ์˜ˆ: typeof, instanceof, โ€œpropโ€ in obj

๐Ÿ“Œ 2. ์‚ฌ์šฉ์ž ์ •์˜ ํƒ€์ž… ๊ฐ€๋“œ (Custom Type Guard)

๊ธฐ๋ณธ ํƒ€์ž…๊ฐ€๋“œ

interface Cat { meow: number; } interface Dog { bow: number; } // ๊ธฐ๋ณธ ํƒ€์ž… ๊ฐ€๋“œ // a is Dog ํ•จ์ˆ˜๊ฐ€ true๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ฒฝ์šฐ, a๋Š” Dog ํƒ€์ž…์ด๋ผ๊ณ  ํŒ๋‹จ function catOrDog(a: Cat | Dog): a is Dog { // ํƒ€์ž… ํŒ๋ณ„์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ if ((a as Cat).meow) { return false; } return true; } const cat: Cat | Dog = { meow: 3 }; if (catOrDog(cat)) { console.log(cat.meow); } if ("meow" in cat) { console.log(cat.meow); }

๐Ÿ“Œ 3. PromiseSettledResult<T> ํ•„ํ„ฐ๋ง

๐Ÿ”น PromiseSettledResult๋ž€?

type PromiseSettledResult<T> = | PromiseFulfilledResult<T> | PromiseRejectedResult
  • .allSettled()์—์„œ ์‚ฌ์šฉ๋จ
    • ๋ชจ๋“  Promise๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆผ
    • ์„ฑ๊ณตํ•ด๋„, ์‹คํŒจํ•ด๋„ ์ „๋ถ€ ๋ฐ˜ํ™˜ํ•จ โœ…
    • ๊ฒฐ๊ณผ ๋ฐฐ์—ด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•ํƒœ:
- ์„ฑ๊ณต : { status: "fulfilled", value: 1 }, - ์‹คํŒจ : { status: "rejected", reason: "์—๋Ÿฌ" }, - ์„ฑ๊ณต โ†’ { status: "fulfilled", value: T } - ์‹คํŒจ โ†’ { status: "rejected", reason: any }

โœ… ์‹คํŒจํ•œ ๊ฒฐ๊ณผ๋งŒ ํ•„ํ„ฐ๋ง

// ์‹คํŒจํ•œ๊ฒƒ๋งŒ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์„๋•Œ const isRejected = (input: PromiseSettledResult<unknown>): input is PromiseRejectedResult => input.status === "rejected";

โœ… ์„ฑ๊ณตํ•œ ๊ฒฐ๊ณผ๋งŒ ํ•„ํ„ฐ๋ง

const isFulfilled = <T>(input: PromiseSettledResult<T>): input is PromiseFulfilledResult<T> => input.status === "fulfilled";

๐Ÿ“Œ 4. Promise ์ƒํƒœ ์š”์•ฝ

์ƒํƒœ์„ค๋ช…
pending์•„์ง ์‹คํ–‰ ์ค‘
fulfilled์„ฑ๊ณต ์™„๋ฃŒ โ†’ .then()
rejected์‹คํŒจ ์™„๋ฃŒ โ†’ .catch()
settled์™„๋ฃŒ๋จ (fulfilled or rejected)

Promise์˜ ์ƒํƒœ

  • Panding
    • settled
      • ์„ฑ๊ณต : resolved
      • ์‹คํŒจ : rejected
// Promise // ์„ฑ๊ณต resolved // ์‹คํŒจ rejected // sattled : .then().catch() // ์„ฑ๊ณต resolved .then() // ์‹คํŒจ rejected .catch() const results: PromiseSettledResult<number>[] = await Promise.allSettled([Promise.resolve(1), Promise.reject("err")]); const successOnly = results.filter(isFulfilled); // ํƒ€์ž…์€ PromiseFulfilledResult<number>[] const failureOnly = results.filter(isRejected); // ํƒ€์ž…์€ PromiseRejectedResult[] promise.then().catch();
const getUser = (id: number) => { if (id === 2) Promise.reject("โŒ ์‹คํŒจ"); else Promise.resolve({ id, name: `User ${id}` }); }; const requests = [1, 2, 3].map(getUser); const results = await Promise.allSettled(requests); //[ // { status: "fulfilled", value: { id: 1, name: "User 1" } }, // { status: "rejected", reason: "โŒ ์‹คํŒจ" }, // { status: "fulfilled", value: { id: 3, name: "User 3" } } //]
Last updated on