É possível criar uma interface em TypeScript com função opcional?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
É possível criar uma interface em TypeScript com função opcional?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Respostas:
Atualmente, existem três sintaxes que o TypeScript permite para declarações de funções em interfaces:
Usando o seu exemplo de uma validationfunção com 1 parâmetro (do anytipo) e um booleanvalor de retorno:
validation: {(flag: any): boolean};
ou na sintaxe mais recente:
validation(flag: any) : boolean;
ou uma alternativa é:
validation: (flag: any) => boolean;
Solução:
portanto, torná-lo opcional com a sintaxe antiga é fácil:
validation?: {(flag: any): boolean};
com a segunda sintaxe (adição recente - graças a @toothbrush)
validation?(flag: any) : boolean;
ou na terceira sintaxe (como você descobriu):
validation?: (flag: any) => boolean;
anyé um tipo, mas o nome de um parâmetro que é implicitamente do tipo any. Os parâmetros devem ser nomeados, mesmo em interfaces. Este código não será compilado se --noImplicitAny estiver habilitado. Deve ser algo assim:validation?:(whatever:any) => boolean; onde whateverestá algum nome de parâmetro razoável.
if (object.validation):) Ele precisa ser comparado ao contexto do objeto, então if (this.validation)também pode ser apropriado dependendo da sua circunstância.