如何实现没有名称的接口成员?

时间:2017-01-05 13:18:28

标签: javascript typescript

我有这样的界面(有效的TypeScript)

interface IPerson {
    (name: string, age: number): IPerson,
    getSomething(): string
}

我想在课堂上实现:

class Person implements IPerson {
    constructor(private something: string) {

    }

    getSomething(): string {
        return this.something;
    } 
}

如何实施(name: string, age: number): IPerson会员?

3 个答案:

答案 0 :(得分:1)

这是一种功能类型。你应该这样实现......

interface SearchFunc {
    (source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
}

我不知道一个类是否可能直接实现它。

检查打字稿手册功能类型http://www.typescriptlang.org/docs/handbook/interfaces.html

答案 1 :(得分:1)

嗯,也许这样?

var person = ((): IPerson => {
    var x: any = function (name: string, age: number): IPerson {
                      return this;
                 }
    x.getName = function () {
                      return "NAME";
                 }
    return x;
    }
);

.... JS ....

var person = (function () {
    var x = function (name, age) {
        return this;
    };
    x.getName = function () {
        return "NAME";
    };
    return x;
});

答案 2 :(得分:1)

您发布的界面描述了具有特定签名的函数,该函数还有一个名为getSomething的附加方法 在描述为Hybrid Types的文档中。

我认为没有办法创建实现它的类,你基本上只需要一个工厂函数来创建实现这个接口的实例:

function createPerson(name: string, age: number): IPerson {
    let person = function(newName: string, newAge: number) {
        return createPerson(newName, newAge);
    } as IPerson;
    person.getSomething = function () {
        return `${ name }: ${ age }`;
    }

    return person;
}

code in playground

但这是一个奇怪的定义。