let's get IT with DAVINA ๐ป
TypeScript (Function) ๋ณธ๋ฌธ
Call Signatures
- ๋ง์ฐ์ค๋ฅผ ๊ฐ๋ค ์ฌ๋ ค๋ณด๋ฉด ์์ ๋จ๋ ์ ๋ฐ์ค
- ํจ์์ ์ธ์ type ์ ์ + return type ์ ์
- Type์ ๋จผ์ ์ ์ํ ๋ค -> ํจ์/์ฝ๋๋ฅผ ๊ตฌํํ์
- instead of ํจ์๋ฅผ ๊ตฌํํ๋ฉด์ ๋์์ type์ ์ ์ํ๋ ๊ฒ๋ณด๋ค better
//type ๋ฏธ๋ฆฌ ์ ์
type Add = (a:number, b:number) => number
const add:Add = (a,b) => a+b
//instead of
const add = (a:number, b:number) => a+b
Overloading
- ํจ์๊ฐ ์ฌ๋ฌ ๊ฐ์ call signatures๋ฅผ ๊ฐ์ง๊ณ ์์ ๋ ๋ฐ์
- ๋ด๊ฐ ์ง์ ์ธ ์ผ์ ๊ฑฐ์ ์์ง๋ง, ์ธ๋ถ ํจํค์ง๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๋ง์ด ๋ณผ ์ ์๊ธฐ ๋๋ฌธ์ ์์๋์!
type Config = {
path: string,
state: object
}
type Push = {
(path:string) : void //void=์๋ฌด๊ฒ๋ returnํ์ง ์์
(config: Config) : void
}
const push:Push = (config) => {
if(typeof config==="string") {console.log(config)}
else {
console.log(config.path,config.state)
}
}
type Add = {
(a:number, b:number) : number
(a:number, b:number, c:number) : number
}
//parameter ๊ฐ์๊ฐ ๋ค๋ฅผ๋? optionalํ ์ธ์๋ ์ ํํ ๋ค์ ์ ์ํด์ฃผ๊ธฐ
const add:Add = (a,b,c?:number) => {
if(c) return a+b+c
return a+b
}
Polymorphism
- many + structure = ๋คํ์ฑ
- type์ด ๋ญ๊ฐ ๋ค์ด์ฌ์ง ๋ชจ๋ฅด๋ ์ํ๋ก call signature์ ์์ฑํด์ผ ํ ๋
- generic์ ์ฌ์ฉํ์!
- generic ์ ์ ๋ฐฉ๋ฒ
type [type์ด๋ฆ๋๋ฌธ์] = {
<[Generic์ด๋ฆ]> (arr: [Generic์ด๋ฆ][]) : void//void๋์ ์๊ฑฐ๋..๋ญ returnํ๋์ง์ ๋ฐ๋ผ
}
function superPrint<T>(a: T[]){
return a[0];
}
- ๋ค์ํ generic usage
type SuperPrint={
<T>(arr: T[]) : T
}
const superPrint:SuperPrint = (arr) => arr[0]
//๋ฐ์์ฒ๋ผ ์ด๋ค ํ์
์ ์์๊ฐ ๋ฐฐ์ด์ ์์๋ก ๋ค์ด์๋ ์๊ด์๊ฒ ๋ง๋ค์ด์ฃผ๋ generic
//์ผ์ผ์ด ์์ type์ ๊ฒฝ์ฐ์ ์๋ง๋ค ๋ค ์ ์ํ๊ธฐ๊ฐ ํ๋ค๋ค!!
superPrint([1,2,3]) //number
superPrint(["1","2","3"]) //string
superPrint([true,false,true]) //boolean
superPrint([true,"1",1]) //number|boolean|string
type A = Array<number> //genericํ ๋ฐฐ์ด ์์ฑํด์ค
let a:A=[1,2,3,4]
function printAllNumbers(arr: Array<number>){}
type Player<E> = {
name: string
extraInfo: E
}
//generic ์ค์ ํด์ฃผ๊ธฐ (์ด๋ค type์ ์ธ์ง)
type ViniExtra = {
favFood: string
}
type ViniPlayer = Player<ViniExtra>
const vini: ViniPlayer = {
name: "vini",
extraInfo: {
favFood: "egg"
}
}
Generics Recap
any๋ฅผ ์์ฐ๊ณ generic์ ์ฐ๋ ์ด์ ๋?
- any๋ ์ ํํ ๋ฌด์จ type์ธ์ง ์ง์ ํด์ฃผ์ง ์๊ณ ,
- generic์ ์ด๋ค type์ด ๋ค์ด์ค๋์ ๋ฐ๋ผ ๊ทธ type์ ์ถ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์!
→ ํ๋ง๋๋ก, generic์ ๋ด๊ฐ ์ํ๋๋๋ก signature์ ์์ฑ/์ฌ์ฉ ๊ฐ๋ฅ!
- generic์ ์ฌ๋ฌ๊ฐ ์ฐ๊ณ ์ถ๋ค๋ฉด?
type SuperPrint={
<T, M>(a: T[], b:M) : T
}
superPrint([1,"hi", true], "x")
superPrint([1,"hi", true], false)
//generic์ด ์์ฑ๋๋ฉด ๊ทธ ์์์ ๋ง๊ฒ ์์์ TS๊ฐ generic์ ์ฝ์ด์ค
'DEV_IN > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ๏ธ ์์ฃผ ๋ณผ ์ ์๋ Errors (0) | 2023.02.17 |
---|---|
TypeScript(apply) (2) | 2023.02.17 |
TypeScript(Interface) (4) | 2023.02.16 |
TypeScript(Classes) (4) | 2023.02.12 |
TypeScript๋? & Types (0) | 2023.02.09 |
Comments