TypeScript Fungsi opsional di Antarmuka

99

Apakah mungkin untuk membuat Antarmuka dalam TypeScript dengan fungsi opsional?

interface IElement {
  name: string;
  options: any;
  type: string;
  value?: string;
  validation(any): boolean; // --> should be optional.

}
Anton Selin
sumber
2
Saya menemukan jawaban, saya rasa ada kemungkinan untuk mengimplementasikan fungsi opsional seperti ini: validasi ?: (ada) => boolean;
Anton Selin

Jawaban:

194

Saat ini ada tiga sintaksis yang TypeScript memungkinkan untuk deklarasi fungsi dalam antarmuka:

Menggunakan contoh validationfungsi Anda yang mengambil 1 parameter ( anytipe) dan booleannilai kembalian:

validation: {(flag: any): boolean};

atau dalam sintaks yang lebih baru:

validation(flag: any) : boolean;

atau alternatifnya adalah:

validation: (flag: any) => boolean;

Larutan:

jadi untuk membuatnya opsional dengan sintaks lama itu mudah:

validation?: {(flag: any): boolean};

dengan sintaks kedua (penambahan terbaru - terima kasih @toothbrush)

validation?(flag: any) : boolean;

atau dalam sintaks ketiga (seperti yang Anda temukan):

validation?: (flag: any) => boolean;
Hilang Coding
sumber
3
Cara Anda menulisnya, anybukanlah tipe, tetapi merupakan nama parameter yang secara implisit bertipe any. Parameter harus diberi nama, bahkan pada antarmuka. Kode ini akan gagal untuk dikompilasi jika --noImplicitAny diaktifkan. Seharusnya seperti ini: di validation?:(whatever:any) => boolean;mana whateverbeberapa nama parameter yang masuk akal.
NYCdotNet
@NYCdotNet: Ya, saya seharusnya tidak mengambil yang asli sebagai-dibaca . Dikoreksi :)
Gone Coding
@ pergi-coding Hai! Bagaimana saya tahu jika fungsi sudah ditentukan atau tidak?
Ilan Olkies
1
@IlanOlkies: Cara yang sama Anda menguji apa pun dalam JavaScript if (object.validation):) Ini harus bertentangan dengan konteks objek, jadi if (this.validation)mungkin juga sesuai tergantung pada keadaan Anda.
Gone Coding