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.

}

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;

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.