call signature
함수의 타입을 지정하기
type Add = (a: number, b: number) => number;
const add: Add = (a, b) => a + b;
함수의 타입을 먼저 지정하고 함수를 구현한다
오버 로딩
오버 로딩: 같은이름을 가지고 있으나 매개변수, 리턴타입 등을 다르게 설정해서 같은이름을 중복으로 사용하는것
자바에서 메소드 오버로딩은 많이 써봤었다.
//선언부
function normal(num: number): void;
function normal(str: string, arr: string): void;
//구현부
function normal(a: any, b?: string): void {
console.log(typeof (a), typeof (b));
}
normal(1)
normal('하이', '하이');
// normal(1,'하이'); 인자의 타입이 일치하지않아서 에러
매개변수 갯수 체크
type Add = {
(a: number, b: number, c: number): number,
(a: number, b: number): number
}
const add: Add = (a, b, c?: number) => { //추가 파라미터는 옵션임
if (c) return a + b + c;
return a + b;
}
add(1,2) //3
add(1,2,3) //6
// add(1,2,3,4) 인자의 수가 맞지 않아서 에러
매개변수의 Type 체크
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);
}
push('하이') //하이
push({ path: '경로', state: { 오브젝트: '출력' } }) //경로
// push({path:'경로'}); 인자가 string도 아니고 Config타입도 아니여서 에러
자바에서 메소드 오버로딩은 그냥 하면 됐는데 타입 스크립에서 구현은 성가시다