¿Es posible crear una interfaz en TypeScript con función opcional?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
¿Es posible crear una interfaz en TypeScript con función opcional?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Respuestas:
Actualmente, hay tres sintaxis que TypeScript permite para declaraciones de funciones en interfaces:
Usando su ejemplo de una validationfunción que toma 1 parámetro (de anytipo) y un booleanvalor de retorno:
validation: {(flag: any): boolean};
o en la sintaxis más reciente:
validation(flag: any) : boolean;
o una alternativa es:
validation: (flag: any) => boolean;
Solución:
así que hacerlo opcional con la sintaxis anterior es fácil:
validation?: {(flag: any): boolean};
con la segunda sintaxis (adición reciente - gracias a @toothbrush)
validation?(flag: any) : boolean;
o en la tercera sintaxis (como encontraste):
validation?: (flag: any) => boolean;
anyes un tipo, sino el nombre de un parámetro que es implícitamente de tipo any. Los parámetros deben tener un nombre, incluso en las interfaces. Este código no se podrá compilar si --noImplicitAny está habilitado. Debería ser algo como esto: validation?:(whatever:any) => boolean;dónde whateverestá algún nombre de parámetro razonable.
if (object.validation):) Es necesario contra el contexto del objeto, por lo if (this.validation)que también puede ser apropiado según sus circunstancias.