Front-end/타입스크립트로 블록체인 만들기

[TS] Overloading

탱 'ㅅ' 2023. 12. 15. 11:23

Function/Method Overloading 

하나의 함수가 서로 다른 여러 개의 call signature를 가졌을 때 발생한다.

1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.

2. 메소드의 이름을 절약할 수 있다.

 

직접 작성하기보다 외부 패키지/라이브러리에서 빈번하게 발견될 수 있다

패키지나 라이브러리는 아래와 같이 두 가지 경우의 overloading으로 디자인돼있을 것이다

 

Case1. 매개변수 타입이 다른 경우

 

ex. in Next.js

// object
Router.push({
	path: "/home",
	state: 1
})

// string
Router.push("/home")
type Config = {
	path: string,
	state: number
}

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)
	}
}

 

 

Case2. 매개변수 개수가 다른 경우

이와 같은 함수는 거의 없지만, 외부 라이브러리에서 활용될 수 있다

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)

 

type Add = (a: number, b: number, c?: number) => number

이렇게 작성해도 무방하다. 큰 차이 없음 (Nico says)

 


Overridng (not in JS)

대학교에서 C# 배울 당시, overloading과 overriding 차이를 분명히 하라던 교수님의 일침이 생각나서 다시 찾아봤다.

 

객체지향 언어에서,

부모 클래스로부터 메소드 이름과 signature(매개변수, 리턴값)가 같은, 상속받은 메소드를

자식 클래스에서 재정의하는 것

 

즉 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 정의하는 것.

 

@Override : 내용만을 새로 정의함으로써, 선언부는 부모의 것과 완전 일치해야한다.

 


OFFICIAL

Overloaded Functions

 

Documentation - Declaration Reference

How to create a d.ts file for a module

www.typescriptlang.org

Function Overloads

 

Documentation - More on Functions

Learn about how Functions work in TypeScript.

www.typescriptlang.org

Warning - Overloads and Callbacks & Function Overloads

 

Documentation - Do's and Don'ts

Recommendations for writing d.ts files

www.typescriptlang.org

 

'Front-end > 타입스크립트로 블록체인 만들기' 카테고리의 다른 글

[TS] HW - Polymorphism, Generic Type  (1) 2023.12.21
[TS] Polymorphism 다형성  (0) 2023.12.20
[TS] Why not JavaScript  (0) 2023.12.18
[TS] Call Signatures  (0) 2023.12.15
[TS] Types of TS  (0) 2023.10.10