์ธํฐํ์ด์ค์ ํจ์์ ์ฐจ์ด
ํฌ๋ค ์๋ค๋ก ์ ๊ทผํ๊ฒ ๋์ ํฌ๊ธฐ๋ฅผ ์ฌ๋ ค๊ณ (?)ํ๋ ์ด๋ ค์์ง๋๊ฒ ์๋๊ฐ ์ถ์ต๋๋ค.๋จ์ํ๊ฒinterface A { prop1: string } interface B { prop1: string; prop2: number; } let a: A = { prop1: `type A`} let b: B = { prop1: `type B`, prop2: 2}์ ๊ฒฝ์ฐa ๋ prop1๋ฅผ ํฌํจํ๋ ์ด๋ค ๊ฐ์ฒด๋ ๊ฐ์ง ์ ์๊ณ b๋ prop1, prop2๋ฅผ ํฌํจํ๋ ์ด๋ค ๊ฐ์ฒด๋ ๊ฐ์ง ์์ผ๋a ์๋ b๋ฅผ ํ ๋นํ ์ ์์ผ๋ (a๋ prop1๋ง ๋ถ๋ช
ํ ์กด์ฌํ๋ฉด ๋๋๊น) a = b; // possibleb ์๋ a๋ฅผ ํ ๋นํ ์ ์๊ณ (b๋ prop2๊ฐ ์์ผ๋ฉด ํ์
์ค๋ฅ์ธ๋ฐ a๋ prop1์ผ๋ก๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ๋ ์์ผ๋๊น)b = a // type errorlet fn1 = function(a: number) {} let fn2 = function(a: number, b: number) {}์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉดfn1๋ number ํ์
์ ํ๋ผ๋ฏธํฐ ํ๋๋ง ๋ฐ๋ ํจ์๋ฅผ ๊ฐ์ง ์ ์๊ณ fn2๋ number ํ์
์ ํ๋ผ๋ฏธํฐ์ string ํ์
์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐ๋ก ๋ฐ๋ ํจ์๋ฅผ ๊ฐ์ง ์ ์์ผ๋fn1์๋ prop1 ํ๊ฐ๋ง ๋ฐ์ผ๋๊น prop1๊ณผ prop2 ๋ ๊ฐ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ์์ผ ํ๋ fn2๋ฅผ ํ ๋น ํ ์ ์๊ณ fn1 = fn2 // type errorfn2์๋ prop1๊ณผ prop2๋ฅผ ๋ฐ์ผ๋๊น prop1๊ณผ undefined์ธ prop2๋ฅผ ์ ๋ฌํ๊ฒ ๋๋ ์
์ธ fn1์ ํ ๋น ๊ฐ๋ฅํfn2 = fn1 // possibleํํ๋ก ์๊ฐํ๋ฉด ๋์ง ์์๊น ์ถ์ต๋๋ค.(๊ทธ๋ฐ๋ฐ ์ ๊ฐ ์ ๋๋ก ์ดํดํ๊ฑด ๋ง๋..๊ฑฐ.........๊ฒ ............์ฃ ......?)