본문 바로가기
🟨 JavaScript 🟨/🟦TypeScript🟦

TypeScript - function

by 백씨네 2024. 2. 22.

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)// "나이는 숫자로 입력해주세요 출력"

주의사항

  • 오버로드 서명은 구현보다 위에 선언되어야 한다.
  • 구현 서명은 공개되지 않으며, 외부에서는 볼 수 없다.
  • 구현은 모든 오버로드 서명을 충족할 수 있어야 한다.

 

[코딩앙마 : https://youtu.be/prfgfj03_VA?si=GkfK6PdhXkkIpDLz]

댓글