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.