typescript1.5 - Dekorator Typescript dan Fungsi Panah


Saya sedang mencoba mengimplementasikan dekorator metode Typescript sebagai berikut.

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

    }
}

Dan digunakan seperti di bawah.

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

Tapi saya sedang mencoba mencari tahu bagaimana menggunakan dekorator dengan implementasi fungsi Arrow seperti di bawah ini.

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

Tetapi implementasi di atas menunjukkan kesalahan berikut saat dikompilasi.

error TS2322: Tipe ''(target: any, propertyKey: string, descriptor: TypedPropertyDescriptor) => void'' tidak dapat ditetapkan ke tipe ''(target: Object, propertyKey: string | symbol) => void'.

Demo tentang masalahnya.

Jawaban #1

Dalam kasus terakhir, field getData dianggap oleh compiler sebagai properti (bukan metode murni). Ini berarti argumen descriptor tidak akan dilewatkan dalam file javascript yang dikompilasi.

Yang perlu Anda lakukan adalah memodifikasi dekorator Anda dan menjadikan bidang descriptor opsional. Pertimbangkan contoh ini:

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

    }
}

Saya telah memodifikasi contoh Anda di sini

Semoga Beruntung

Sumber Terkait (terima kasih untuk ini @David Sherret)

  1. Tanda tangan dekorator

Artikel terkait