É 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.
}
javascript
typescript
Anton Selin
fonte
fonte
Respostas:
Atualmente, existem três sintaxes que o TypeScript permite para declarações de funções em interfaces:
Usando o seu exemplo de uma
validation
função com 1 parâmetro (doany
tipo) e umboolean
valor de retorno:ou na sintaxe mais recente:
ou uma alternativa é:
validation: (flag: any) => boolean;
Solução:
portanto, torná-lo opcional com a sintaxe antiga é fácil:
com a segunda sintaxe (adição recente - graças a
@toothbrush
)ou na terceira sintaxe (como você descobriu):
validation?: (flag: any) => boolean;
fonte
any
é um tipo, mas o nome de um parâmetro que é implicitamente do tipoany
. 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;
ondewhatever
está algum nome de parâmetro razoável.if (object.validation)
:) Ele precisa ser comparado ao contexto do objeto, entãoif (this.validation)
também pode ser apropriado dependendo da sua circunstância.