이전강의 보러가기.
2022.06.15 - [IT] - [Nomad Coders] TypeScript로 블록체인 만들기 #1, #2 정리
#3 FUNCTIONS
#3.0 Call Signatures
위에 있는 것이 Call Signatures
type Add = (a:number, b:number) => number;
const add:Add = (a, b) => a+b
이런식으로 Signature type을 만들 수 있음.
#3.1 Overloading
type Add = {
(a:number, b:number) : number
(a:number, b:string) : number
}
const add:Add = (a, b) => {
if (typeof b === "string") return a
return a + b
}
-
파라미터 타입이 다른 경우
type Config = {
path: string
state: object
}
type Push = {
(path:string):void
(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,
}
const add:Add = (a, b, c?:number) => {
if(c) return a + b + c
return a + b
}
add(1, 2)
add(1, 2, 3)
#3.2 Polymorphism(다형성)
: how generic help you
concrete type : number, boolean, string 등등
type SuperPrint = {
(arr: number[]): void
(arr: boolean[]): void
(arr: string[]): void
(arr: (number|boolean)[]): void
}
const superPrint: SuperPrint = (arr) => {
arr.forEach(i => console.log(i))
}
superPrint([1, 2, 3, 4])
superPrint([true, false, true])
superPrint(["a", "b", "c"])
superPrint([1, 2, true, false])
위처럼 사용할 것으로 예상되는 type을 일일히 다 적어줘야함.
귀찮게 언제 다 적고 있음..? 그래서,, 쓰는게 generic!
-
generic : type의 placeholder 같은 것. 어떤 type이 오는지 확인해서 알아서 맞춰줌.
generic 쓰려면 <>로 표시.
type SuperPrint = {
<TypePlaceholder>(arr: TypePlaceholder[]): void
}
const superPrint: SuperPrint = (arr) => {
arr.forEach(i => console.log(i))
}
superPrint([1, 2, 3, 4])
superPrint([true, false, true])
superPrint(["a", "b", "c"])
superPrint([1, 2, true, false])
이런 식으로작동됨. Super Super Comfortable, right?
ts가 함수에서 확인된 인수 타입으로 알아서 확인해줌
-
type SuperPrint = <T>(arr: T[]) => T
const superPrint: SuperPrint = (arr) => arr[0]
const a = superPrint([1, 2, 3, 4])
const b = superPrint([true, false, true])
const c = superPrint(["a", "b", "c"])
const d = superPrint([1, 2, true, false, "hello"])
간단하게 T로 써도 됨.
#3.3 Generics Recap
type SuperPrint = <T, M>(arr: T[], b:M) => T
const superPrint: SuperPrint = (arr) => arr[0]
const a = superPrint([1, 2, 3, 4], "x")
generic이 2개 이상일 수도 있음.
위에서 superPrint에 인수를 2개 generic으로 받고 있는데,
const b, c, d는 인수가 1개이기 때문에 에러 발생한 것.
#3.4 Conclusions
Generics가 Call Signature 이외에 사용되는 방법 예시
Generic 굉장히 많이 사용됨.
function superPrint<T>(a: T[]) {
return a[0]
}
const a = superPrint([1, 2, 3, 4])
const b = superPrint([true, false, true])
const c = superPrint(["a", "b", "c"])
const d = superPrint([1, 2, true, false, "hello"])
-
type Player<E> = {
name:string
extraInfo:E
}
type nicoExtra = {
favFood:string
}
type NicoPlayer = Player<nicoExtra>
const nico: NicoPlayer = {
name:"nico",
extraInfo: {
favFood:"kimchi"
}
}
const lynn: Player<null> = {
name:"lynn",
extraInfo:null
}
-
function printAllNumbers (arr: Array<number>) {}
다음강의 보러가기.
2022.06.16 - [IT] - [Nomad Coders] TypeScript로 블록체인 만들기 #4 정리
'IT > DEV Study' 카테고리의 다른 글
[Nomad Coders] TypeScript로 블록체인 만들기 #5.0 to #5.4 정리 (0) | 2022.06.16 |
---|---|
[Nomad Coders] TypeScript로 블록체인 만들기 #4 정리 (0) | 2022.06.16 |
[Nomad Coders] TypeScript로 블록체인 만들기 #1, #2 정리 (0) | 2022.06.15 |
[Python] Daily Work Log Program (근무일지 프로그램) 만들기 : ) (0) | 2022.03.25 |
[Github&Bootstrap] 나만의 블로그 혹은 모바일 초대장, 청첩장 만들기 : ) (4) | 2020.06.03 |