[유니온 타입( | )이 포함된 함수 에러 - 예시 코드]

위 코드에서 ID는 유니온 타입으로서 string 또는 number를 인수로 받을 수 있다. 에러가 발생한 이유는 명시적으로 ID의 타입이 string 또는 number일 때, 리턴으로 Login 또는 string 중 무엇을 반환해야할지 정해지지 않았기 때문에 발생했다.

이러한 경우 ‘오버로드’를 함수 선언 윗부분에 작성하여, 분기를 명시해야 한다.

image-20220711083627868

[오버로드로 에러를 픽스한 함수 - 예시 코드]

interface Login {
    ID: string;
    PW: number;
}
// 오버로드, ID 가 string 이면, Login 리턴
function login(ID: string, PW: number): Login;

// 오버로드, ID 가 number 이면, string 리턴
function login(ID: number, PW: number): string;
function login(ID: string | number, PW: number): Login | string {
    if (typeof ID == "string") {
        return {
            ID, PW
        };
    } else {
        return "Input only number on PW";
    }
}

const web1: Login = login("ldk", 1234);
const web2: string = login(1234, 5678);

console.log(web1);
console.log(web2);
{ ID: 'ldk', PW: 1234 }
Input only number on PW

댓글남기기