Ist es möglich, eine Schnittstelle in TypeScript mit optionaler Funktion zu erstellen?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Ist es möglich, eine Schnittstelle in TypeScript mit optionaler Funktion zu erstellen?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Antworten:
Derzeit gibt es drei Syntaxen, mit denen TypeScript Funktionsdeklarationen in Schnittstellen zulässt:
Verwenden Sie Ihr Beispiel für eine validationFunktion, die 1 Parameter (vom anyTyp) und einen booleanRückgabewert verwendet:
validation: {(flag: any): boolean};
oder in der neueren Syntax:
validation(flag: any) : boolean;
oder eine Alternative ist:
validation: (flag: any) => boolean;
Lösung:
Es ist also einfach, es mit der alten Syntax optional zu machen:
validation?: {(flag: any): boolean};
mit der zweiten Syntax (kürzlich hinzugefügt - danke an @toothbrush)
validation?(flag: any) : boolean;
oder in der dritten Syntax (wie Sie gefunden haben):
validation?: (flag: any) => boolean;
anyist kein Typ, sondern der Name eines Parameters, der implizit vom Typ ist any. Parameter müssen auch auf Schnittstellen benannt werden. Dieser Code kann nicht kompiliert werden, wenn --noImplicitAny aktiviert ist. Es sollte ungefähr so aussehen: validation?:(whatever:any) => boolean;Wo whateverist ein vernünftiger Parametername?
if (object.validation):) Es muss gegen den Objektkontext gerichtet sein, if (this.validation)kann also auch abhängig von Ihren Umständen angemessen sein.