È possibile creare un'interfaccia in TypeScript con una funzione opzionale?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
È possibile creare un'interfaccia in TypeScript con una funzione opzionale?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
Risposte:
Esistono attualmente tre sintassi consentite da TypeScript per le dichiarazioni di funzioni nelle interfacce:
Usando il tuo esempio di una validationfunzione che accetta 1 parametro (di anytipo) e un booleanvalore di ritorno:
validation: {(flag: any): boolean};
o nella sintassi più recente:
validation(flag: any) : boolean;
oppure un'alternativa è:
validation: (flag: any) => boolean;
Soluzione:
quindi renderlo opzionale con la vecchia sintassi è facile:
validation?: {(flag: any): boolean};
con la seconda sintassi (aggiunta recente - grazie a @toothbrush)
validation?(flag: any) : boolean;
o nella terza sintassi (come hai trovato):
validation?: (flag: any) => boolean;
anyè un tipo, ma è il nome di un parametro che è implicitamente di tipo any. I parametri devono essere nominati, anche sulle interfacce. Questo codice non verrà compilato se --noImplicitAny è abilitato. Dovrebbe essere qualcosa del genere: validation?:(whatever:any) => boolean;dov'è whateverun nome di parametro ragionevole.
if (object.validation):) Deve essere confrontato con il contesto dell'oggetto, quindi if (this.validation)potrebbe anche essere appropriato a seconda delle circostanze.