Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
407 views
in Technique[技术] by (71.8m points)

typescript - Overload implementation

In the video I've found that interfaces can use strange overload technique. The code below is compiled but does not work. I have some questions, all of them are placed inside of the code:

interface X{

// how can the class implements such overload ?
    f:{ 
        (s:string):string;
        (s:number):string;
        data:any;
    };
}

class xxx
{

// how to initialize this structure ?
    f:{   
        (s:string):string;
        (s:number):string;
        data:any;
    };
}


var x = new xxx();

// how should the class xxxx look to be used with this function ?
function a(x:X):string{
    return x.f("1");    
}

a(x);
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

I think you're trying to call the function f with either a string or a number.

In your interface, you define the overloads like this:

interface X{
    b(s:string) : string;

    f (s:string):string;
    f (s:number):string;
}

And you implement the interface like this.

class xxx implements X
{
    b(s:string) : string
    {
        return "";      
    }

    f (s: string): string;
    f (s: number) : string;
    f (s: any) : string {
        return s.toString();
    }
}

Here is complete example you can paste into the Playground to try:

interface X {
    b(s:string) : string;
    f (s:string):string;
    f (s:number):string;
}

class xxx implements X {
    b(s:string) : string {
        return "";      
    }

    f (s: string): string;
    f (s: number) : string;
    f (s: any) : string {
        return s.toString();
    }
}

var x = new xxx();

alert(x.f("1"));
alert(x.f(5));

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...