1

ich die folgende Klasse erstellt:Typoskript Klasse: „Überlastsignatur ist nicht kompatibel mit Funktionsimplementierung“

export class MyItem { 
    public name: string; 
    public surname: string; 
    public category: string; 
    public address: string; 

    constructor(); 
    constructor(name:string, surname: string, category: string, address?: string); 
    constructor(name:string, surname: string, category: string, address?: string) { 
    this.name = name; 
    this.surname = surname; 
    this.category = category; 
    this.address = address; 
    } 
} 

ich die folgende Fehlermeldung erhalten:

Overload signature is not compatible with function implementation

ich mehrere Möglichkeiten versucht, den Konstruktor zu überlasten Das letzte, was ich ausprobiert habe, ist, dass ich oben gepostet habe (das bekomme ich von here).

Aber ich bekomme immer noch den gleichen Fehler. Was ist falsch an meinem Code?

+1

Was möchten Sie tun? Sie möchten einen leeren (Standard) -Konstruktor haben und einen anderen, der all diese Argumente erhält? –

+1

Warum schreiben Sie den zweiten Konstruktor zweimal aus? –

+0

@NitzanTomer: ja. – smartmouse

Antwort

10

Sie erhalten diesen Kompilierungsfehler, da die Signatur der Implementierungsfunktion den von Ihnen deklarierten leeren Konstruktor nicht erfüllt.
Wenn Sie den Standard-Konstruktor haben wollen, sollte es sein:

class MyItem { 
    public name: string; 
    public surname: string; 
    public category: string; 
    public address: string; 

    constructor(); 
    constructor(name:string, surname: string, category: string, address?: string); 
    constructor(name?: string, surname?: string, category?: string, address?: string) { 
     this.name = name; 
     this.surname = surname; 
     this.category = category; 
     this.address = address; 
    } 
} 

(code in playground)

Beachten Sie, dass alle Argumente in der tatsächlichen Umsetzung sind optional und das ist, weil der Standard-Konstruktor keine Argumente hat .
Auf diese Weise hat die implementierende Funktion eine Signatur, die beide anderen Signaturen erfüllt.

Aber man kann dann nur noch, dass einzelne Signatur, ohne dass die beiden anderen zu erklären:

class MyItem { 
    public name: string; 
    public surname: string; 
    public category: string; 
    public address: string; 

    constructor(name?: string, surname?: string, category?: string, address?: string) { 
     this.name = name; 
     this.surname = surname; 
     this.category = category; 
     this.address = address; 
    } 
} 

(code in playground)

Die beiden gleichwertig sind.

Verwandte Themen