this
interface User{
name:string;
}
const Sam:User = {
name:'Sam'
}
function showName(this:User, age:number, gender:'m'|'f') { // this를 사용하기 위해서 매개변수에 this와 this의 타입을 지정한다.
console.log(this.name, age, gender)
}
const a = showName.bind(Sam);
a(30, 'm')
this를 Sam으로 바인딩하고 this를 사용하기 위해서 Sam의 타입과 같은 User로 명시해 준다.
이렇게 하면 this를 이용할 수 있다.
함수의 첫 번째 매개변수로 'this' 타입을 지정하는 것은 'this'의 컨텍스트를 명시적으로 선언하는 방법이다. 함수가 호출될 때 'this'가 가리킬 객체의 타입을 지정해 주는 것으로, 실제 함수 호출 시에는 'this' 매개변수를 제공하지 않는다.
bind에 대해서 공부하기 [[https://youtu.be/KfuyXQLFNW4?si=JtEKSdzzneXpFjVL]]
overloading
동일한 함수 이름에 대해 여러 개의 타입 서명을 선언하는 기능을 말한다.
이를 통해서 함수가 다양한 타입의 인수를 받아들일 수 있도록 하며 각각의 인수 타입 조합에 따라 다른 타입의 반환 값을 가질 수 있게 한다.
- 오버로드 서명 선언 : 함수의 여러 호출 가능한 서명을 선언한다. 이 서명에는 구현을 포함하지 않는다.
- 구현 서명 선언 : 실제 함수 구현과 매칭되는 서명. 이 서명은 오버로드 서명보다 더 일반적인 형태를 가지며, 실제 함수 로직을 포함한다.
- 함수 구현 : 실제 로직을 구현한다. 구현 내에서는 인수의 타입을 체크하여 다양한 시나리오에 맞게 로직을 분기처리한다.
사용 예시 1
//오버로드 서명
function greet(name:string): string;
function greet(age:number): string;
// 구현 서명 및 함수 구현
function greet(nameOrAge: string | number): string {
if(typeof nameOrAge === "string") {
return `Hello, ${nameOrAge}` // 이름이 들어올 때
} else {
return `You are ${nameOrAge} years old` // 나이가 들어올 때
}
}
//사용 시
const greeting1 = greet("Baekspace")
const greeting2 = great(30)
console.log(greeting1) // "Hello Baekspace"
console.log(greeting2) // "You are 30 years old"
사용 예시 2
interface User{
name: string;
age: number;
}
function join(name: string, age: string): string;
function join(name: string, age: number): User;
function join(name: string, age: number | string): User | string {
if(typeof age === "number") {
return {
name,
age,
};
}else{
return "나이는 숫자로 입력해주세요.";
}
}
const sam: User = join("Sam", 30);
console.log(sam)// {name:"Sam", age:30} 출력
const jane: string = join("Jane", "30");
console.log(jane)// "나이는 숫자로 입력해주세요 출력"
주의사항
- 오버로드 서명은 구현보다 위에 선언되어야 한다.
- 구현 서명은 공개되지 않으며, 외부에서는 볼 수 없다.
- 구현은 모든 오버로드 서명을 충족할 수 있어야 한다.
'🟨 JavaScript 🟨 > 🟦TypeScript🟦' 카테고리의 다른 글
TypeScript - Generic (2) | 2024.02.22 |
---|---|
TypeScript - class (feat.예시코드) (1) | 2024.02.22 |
TypeScript - interface (0) | 2024.02.22 |
Jest를 이용한 TDD(Test-Driven Development) (0) | 2023.04.24 |
객체 지향 프로그래밍(OOP) 예제코드 (0) | 2023.04.21 |
댓글