オプションの関数を使用してTypeScriptでインターフェイスを作成することは可能ですか?
interface IElement {
name: string;
options: any;
type: string;
value?: string;
validation(any): boolean; // --> should be optional.
}
回答:
現在、TypeScriptでインターフェイスでの関数宣言を可能にする構文は3つあります。
validation(any型の)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;
anyは、型ではありませんが、暗黙的に型であるパラメータの名前ですany。インターフェイスでも、パラメータに名前を付ける必要があります。--noImplicitAnyが有効になっている場合、このコードはコンパイルに失敗します。次のようになります。適切なパラメータ名はvalidation?:(whatever:any) => boolean;どこにwhateverありますか。
if (object.validation):)オブジェクトコンテキストに対して行う必要があるためif (this.validation)、状況によっては適切な場合もあります。