TypeScript Funzione opzionale in Interface


99

È 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.

}

2
Ho trovato una risposta, penso che sia possibile implementare una funzione opzionale come questa: validation ?: (any) => boolean;
Anton Selin

Risposte:


194

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;

3
Il modo in cui l'hai scritto non 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.
NYCdotNet

@ NYCdotNet: Sì, non avrei dovuto prendere l'originale come letto . Corretto :)
Gone Coding

@ gone-coding Ciao! Come faccio a sapere se la funzione è definita o no?
Ilan Olkies

1
@IlanOlkies: nello stesso modo in cui provi qualsiasi cosa in JavaScript if (object.validation):) Deve essere confrontato con il contesto dell'oggetto, quindi if (this.validation)potrebbe anche essere appropriato a seconda delle circostanze.
Gone Coding
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.