Arayüzde TypeScript İsteğe bağlı işlev


99

TypeScript'te isteğe bağlı işlevle bir Arayüz oluşturmak mümkün müdür?

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

}

2
Bir yanıt buldum, bunun gibi isteğe bağlı işlevi uygulamak mümkün olduğunu düşünüyorum: doğrulama ?: (herhangi) => boolean;
Anton Selin

Yanıtlar:


194

Şu anda TypeScript'in arabirimlerde işlev bildirimlerine izin verdiği üç sözdizimi vardır:

validation1 parametre ( anytürden) ve bir booleandönüş değeri alan bir işlev örneğinizi kullanarak :

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

veya daha yeni sözdiziminde:

validation(flag: any) : boolean;

veya bir alternatif:

validation: (flag: any) => boolean;

Çözüm:

bu nedenle eski sözdizimi ile isteğe bağlı hale getirmek kolaydır:

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

ikinci sözdizimi ile (son eklenen - sayesinde @toothbrush)

validation?(flag: any) : boolean;

veya üçüncü sözdiziminde (bulduğunuz gibi):

validation?: (flag: any) => boolean;

3
Yazma şekliniz anybir tür değil, dolaylı olarak türden olan bir parametrenin adıdır any. Arayüzlerde bile parametreler adlandırılmalıdır. --NoImplicitAny etkinleştirilirse bu kod derlenemez. Şöyle bir şey olmalı: makul bir parametre adı validation?:(whatever:any) => boolean;nerede whatever.
NYCdotNet

@NYCdotNet: Evet, orijinali okunduğu gibi almamalıydım . Düzeltildi :)
Kodlamaya Gitti

@ gone-coding Merhaba! Fonksiyonun tanımlı olup olmadığını nasıl anlarım?
Ilan Olkies

1
@IlanOlkies: JavaScript'teki herhangi bir şeyi test ettiğiniz gibi if (object.validation):) Nesne bağlamına aykırı olması gerekir, bu nedenle if (this.validation)koşullarınıza bağlı olarak da uygun olabilir.
Kodlama Gone
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.