Ich habe die folgende Definition in TyposkriptWie Typoskript Type Definition für gleichnamige Methoden
**sample.d.ts**
declare namespace Sample {
class Widget {
name(): string; // gets the name
name(name: string): void; // sets the name
}
}
erstellen Wenn ich den folgenden abgeleitete Typen erstellen, erhalte ich keine Warnungen:
export class BarWidget extends Sample.Widget {
public name(): string {
return '';
}
}
Wenn jedoch ich erstelle die folgende Typ, ich habe einen Typoskript Fehler:
export class FooWidget extends Sample.Widget {
public name(name: string): void {
}
}
die Fehlermeldung lautet:
Class 'FooWidget' incorrectly extends base class 'Widget'. Types of property 'name' are incompatable. Type '(name: string) => void' is not assignable to type '{(): string; (name: string): void;}'
Update:
Diese Frage für Bibliotheken wie kendo.ui zur Unterstützung betrifft:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/kendo-ui/kendo-ui.d.ts#L3373
In dieser Codedatei muss die Wert-Eigenschaft des Dropdownlist gesetzt werden und get'ted unter Verwendung der folgenden Syntax:
let foo = dd.value();
dd.value('new value');
Meine endgültige Lösung war auf die Definition in kendo.ui.d.ts zu ändern:
declare namespace Sample {
class Widget {
name(name?: string):string
}
}
Das funktioniert außerhalb des Ambient-Namespace. Die Verwendung des geänderten Beispiels gibt eine Fehlermeldung aus: 'Ein Accessor kann nicht in einem Umgebungskontext deklariert werden' –
Nochmals vielen Dank für die Hilfe. Dies würde funktionieren, aber es erfüllt die Anforderung technisch nicht, da es die zugrunde liegende Definition des Namens von einer Methode zu einer Eigenschaft ändert. Ich habe ein Problem auf der Typoskript Repo für diese hinzugefügt: https://github.com/Microsoft/TypeScript/issues/9907 –
beziehen sich auf meine letzten Kommentare hier für zusätzlichen Kontext: https://github.com/Microsoft/TypeScript/issues/9907 –