TypeScript/ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ TypeScript

[ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ] ํƒ€์ž…๋ณ„์นญ ์ธํ„ฐ์„น์…˜์— ์˜ํ•œ ํ™•์žฅ

Rainbow๐ŸŒˆCoder 2022. 4. 26. 17:42
728x90

์œ„์™€ ๊ฐ™์ด ์„ธ๊ฐœ์˜ ํƒ€์ž…๋ณ„์นญ์„ ๋‘์—ˆ๋‹ค.

์ด๋ฅผ ํ† ๋Œ€๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‹คํ—˜์„ ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

ํƒ€์ž… ๋ณ„์นญ์€ extends๋ผ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์—†๊ณ  ์ธํ„ฐ์„น์…˜(&)๋ฅผ ์ด์šฉํ•ด ํ™•์žฅํ•œ๋‹ค.

type TreeNode = {
  value: string;
};

type LeafNode = TreeNode & {
  isLeaf: true;
};

type InnerNode = TreeNode & {
  children: [TreeNode] | [TreeNode, TreeNode];
};

1.

let a: TreeNode = { value: "a" }; //ํ†ต๊ณผ
let a1: TreeNode = { value: "a" , isLeaf: true};
                                  ~~~~~~~~~~~~~

2.

let b: LeafNode = { value: "b", isLeaf: true }; //ํ†ต๊ณผ
let b_test1: LeafNode = {isLeaf: true };
    ~~~~~~~
let b_test2: LeafNode = { value: "b"};
    ~~~~~~~
let b_test3: LeafNode = { value: "b", isLeaf: true, children: [b] };
                                                    ~~~~~~~~~~~~~

 

3.

let c_test1: InnerNode = { value: "c", children: [b] };
let c_test2: InnerNode = { value: "c" };
    ~~~~~~~
let c_test3: InnerNode = { children: [b] };
    ~~~~~~~
let c_test4: InnerNode = { value: "c", children: [b], isLeaf: true };
                                                      ~~~~~~~~~~~~

 

<๊ฐ€๋Šฅํ•œ ๊ฒƒ ๋ชจ์Œ>

type TreeNode = {
  value: string;
};

type LeafNode = TreeNode & {
  isLeaf: true;
};

type InnerNode = TreeNode & {
  children: [TreeNode] | [TreeNode, TreeNode];
};

let a: TreeNode = { value: "a" }; //ํ†ต๊ณผ
let b: LeafNode = { value: "b", isLeaf: true }; //ํ†ต๊ณผ
let c: InnerNode = { value: "c", children: [b] }; //ํ†ต๊ณผ
728x90