TypeScriptインターフェイスのオプション関数


99

オプションの関数を使用してTypeScriptでインターフェイスを作成することは可能ですか?

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

}

2
私は答えを見つけました、私はこのようなオプションの関数を実装することが可能だと思います:validation?:( any)=> boolean;
アントンセリン2014

回答:


194

現在、TypeScriptでインターフェイスでの関数宣言を可能にする構文は3つあります。

validationany型の)1つのパラメーターとboolean戻り値を受け取る関数の例を使用すると:

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

または新しい構文:

validation(flag: any) : boolean;

または代替手段は次のとおりです。

validation: (flag: any) => boolean;

解決:

したがって、古い構文でオプションにするのは簡単です。

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

2番目の構文で(最近の追加-おかげで@toothbrush

validation?(flag: any) : boolean;

または(あなたが見つけたように)3番目の構文で:

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

3
あなたがそれを書いた方法anyは、型ではありませんが、暗黙的に型であるパラメータの名前ですany。インターフェイスでも、パラメータに名前を付ける必要があります。--noImplicitAnyが有効になっている場合、このコードはコンパイルに失敗します。次のようになります。適切なパラメータ名はvalidation?:(whatever:any) => boolean;どこにwhateverありますか。
NYCdotNet 2014

@NYCdotNet:はい、私は元の読み物を取るべきではありませんでした。修正済み:)
コーディングが終了

@ going-codingこんにちは!関数が定義されているかどうかはどうすればわかりますか?
Ilan Olkies 2018

1
@IlanOlkies:JavaScriptで何かをテストするのと同じ方法ですif (object.validation):)オブジェクトコンテキストに対して行う必要があるためif (this.validation)、状況によっては適切な場合もあります。
コーディングが終了しました
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.