TypeScript Optionale Funktion in der Schnittstelle

92

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.

}
Anton Selin
quelle
2
Ich habe eine Antwort gefunden, ich denke, es ist möglich, eine optionale Funktion wie diese zu implementieren: Validierung?: (Any) => boolean;
Anton Selin

Antworten:

179

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;
Codierung weg
quelle
3
Die Art und Weise, wie Sie es geschrieben haben, 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?
NYCdotNet
@NYCdotNet: Ja, ich hätte das Original nicht als gelesen ansehen sollen . Korrigiert :)
Gone Coding
@ gegangen-Codierung Hallo! Woher weiß ich, ob die Funktion definiert ist oder nicht?
Ilan Olkies
1
@IlanOlkies: Genauso wie Sie in JavaScript auf alles testen if (object.validation):) Es muss gegen den Objektkontext gerichtet sein, if (this.validation)kann also auch abhängig von Ihren Umständen angemessen sein.
Gone Coding