2017-01-05 3 views
0

Ich habe eine Schnittstelle wie folgt (die gilt Typoskript)Wie implementiert man ein Interface-Member, das keinen Namen hat?

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

die ich in einer Klasse zu implementieren versuche:

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

    } 

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

Wie implementiere ich das (name: string, age: number): IPerson Mitglied?

+0

Sollte das nicht eine statische benannte Methode sein? Zumindest würde das dein Problem lösen. – Mijago

+0

Kein Problem hier. Ich bin gerade neugierig geworden, einige Typoskriptdefinitionsdateien mit solchen Schnittstellendeklarationen zu sehen. :) – Saravana

Antwort

1

Die Schnittstelle Sie beschreibt mit einer bestimmten Signatur eine Funktion geschrieben, die auch eine zusätzliche Methode getSomething genannt hat.
In der Dokumentation, die als Hybrid Types beschrieben wird.

Ich glaube nicht, dass es eine Möglichkeit gibt, eine Klasse zu erstellen, die es implementiert, Sie im Grunde brauchen nur eine Fabrik Funktion zu haben, die Instanzen, die diese Schnittstelle implementieren erstellt:

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)

Es ist eine seltsame Definition obwohl.

1

Das ist ein Funktionstyp. Sie sollten diese Art und Weise implementieren ...

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

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

Ich weiß nicht, ob es möglich ist, dass eine Klasse diese direkt implementiert.

prüfen Typoskript Handbuch Funktionstypen http://www.typescriptlang.org/docs/handbook/interfaces.html

1

Hm, vielleicht auf diese Weise?

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; 
}); 
Verwandte Themen