までthis.data
はObject
でした。このエラーは、タイプObject
の変数.getPatientAllAddress()
にアクセスしようとしているために発生します。論理的にそのプロパティを持つべきであることを論理的に確認しても、コンパイラはそのプロパティをその変数のインターフェイスで利用可能にする必要があることを理解するにはまだスマートではありません。
ソリューション1
あなたはnoImplicitAny
フラグがあなたをオンにしていない場合
return data['getPatientAllAddress']();
ソリューション2
に最後の行を変更して逃げることができるはずです
this.data
のタイプを:{getPatientAllAddress?:Function}
に設定してください(またはより良い世界ではthis.dataに対応するインターフェイスを作成します。その機能を除く)。ファンクションまたは適切なより具体的なタイプのいずれかを使用してください。
溶液3
フルデータ
interface Bleh {
getPatientAllAddress : Function
}
と型ガード
function isBleh(x:any) : x is Bleh {
return x && x.hasOwnProperty("getPatientAllAddress");
}
ためのインターフェースを定義し、
if (isBleh(this.data)) {
this.data.getPatientAllAddress();
}
として使用3210
解決方法1が最も簡単ですが、解決策2が最も正確です(ただし、このオプション機能だけでなく、そのインターフェイスでもすべてを定義する必要があります)。解決策3では、 1と2が実行可能でない状況で、あなたがしなければならないことについて話しています。
私が知っている限り、あなたは 'data'を宣言しているインターフェイスかインラインを通してthis.dataの"データ型 "を宣言しなければなりません。どのタイプスクリプトでは、 'data'を通常のObjectとして宣言しているということですが、プロパティ" getPatientAllAddress "が効果的に存在し、関数であるかどうかは分かりません。インターフェイスを実装する必要があることをアサートするあなたは "this.data"と入力するとインテリセンスを持っています。インラインでやりたいのなら、 'private data:{getPatientAllAddress:()};'はうまくいくはずです。 – briosheje