10

我是打字稿的新手,这是我想实现的接口;

interface IThing{
    name:string;
    age:number;
    sayHello:{
        (name:string):string;
        (age:number):number;
    }
}

sayHello有两个表示重载版本的签名。我只是不知道如何在课堂上实现它,有什么帮助吗?谢谢。

4

1 回答 1

15

要实现一个重载函数,首先编写您希望可见的所有重载调用签名,然后是一个实现签名,它是所有重载签名的超集。例子:

class Thing implements IThing {
    // Implement the name and age fields
    name: string;
    age: number;

    // Overload signature #1
    sayHello(name: string): string;
    // Overload signature #2
    sayHello(age: number): number;
    // Implementation signature, not visible to external callers
    sayHello(arg: any): any {
        if(typeof arg === 'string') {
            return this.name;
        } else if(typeof arg === 'number') {
            return this.age;
        } else {
            throw new Error('sayHello can only take string or a number');
        }
    }
}

var x = new Thing();
var n = x.sayHello('world'); // n: string
var a = x.sayHello(42); // a: number
var e = x.sayHello(false); // error: false is not string or number
于 2013-07-31T05:31:47.213 回答