typescript1.5 - TypeScript dekorátory a šípkové funkcie


Snažím sa implementovať dekorátor metódy v TypeScript nasledovne.

function dataMethod(name: string, options: any) {        
    return (target: any, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => {        

    }
}

A používa sa to takto.

class HelloWidgetExtesion {         
    @dataMethod("getData", {})
    public getData(name: any, cb: any) {
        cb(null, "");
    }
}

Ale snažím sa zistiť, ako používať dekorátory s implementáciou arrow funkcie ako nižšie.

class HelloWidgetExtesion {         
    @dataMethod("getData", {})
    public getData = (name: any, cb: any) => {
       cb(null, "Greetings from Loopback!");
    }
}

Ale vyššie uvedená implementácia pri kompilácii zobrazuje nasledujúcu chybu.

chyba TS2322: Typ '(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => void' nie je priraditeľný k typu '(target: Object, propertyKey: string | symbol) => void'.

Ukážka problémov.

Odpoveď č. 1

V poslednom prípade je pole getData kompilátorom považované za vlastnosť (nie čistú metódu). To znamená, že argumenty descriptor by neboli odovzdané do skompilovaného súboru JavaScript.

Všetko, čo potrebujete, je upraviť váš dekorátor a urobiť pole descriptor nepovinným. Pozrite sa na tento príklad:

function dataMethod(name: string, options: any) {        
    return (target: any, propertyKey: string, descriptor?: TypedPropertyDescriptor<any>) => {        

    }
}

Upravil som váš príklad tu

Veľa šťastia

Súvisiace zdroje (ďakujeme za to @David Sherret)

  1. Podpis dekorátorov

Súvisiace články