Typade metoder i TypeScript


Hur definierar jag typen på en klassmetod i TypeScript? För en vanlig funktion skulle jag göra

interface Listener { (foo: string, bar: any): void; }

// foo and bar will be typed according to the Listener interface
let listener: Listener = function(foo, bar) { };

Är det möjligt att deklarera en metod med Listener-gränssnittet?

class Foo {

  // will warn about implicit 'any' types
  listener1(foo, bar) { }

  // I want to avoid this
  listener2(foo: string, bar: any): void { }
}

Detta skulle göra det lättare för mig att åsidosätta metoden i underklasser, med vetskapen om att metoderna behöver följa Listener-gränssnittet.

Svar #1

Om du vill vara säker på att endast objekt skickas in i till exempel en funktion som "har" en lyssnarfunktion kan du också använda ett gränssnitt.

 interface IListener{
     listener(type: string, payload: any):void
 }

 function somethingElse( l:IListener ){
     l.listener( "hello", "heavy payload" );
 }

Hoppas det här hjälper.

Svar #2

class Foo {
    //as method
    foo(): boolean {
        return true;
    }

    //as lambda method
    bar = (): boolean => {
        return true;
    }
}

Relaterade artiklar