typescriptでは、私が知っているオブジェクトに、includeUnassignedLocations
とcontractStatusCodes
の2種類のプロパティ(それぞれKnockoutObservable<boolean>
とKnockoutObservableArray<number>
のタイプ)を持つコードを実行したいと思います。使用できるさまざまなクラスがありますが、それらはすべて互いに異なるため、すべてのクラスをインターフェイスに実装したくありません。 typescriptにメソッドに渡されたオブジェクトにこれらのプロパティがあることをチェックする方法はありますか?typescriptでは、インターフェイスではなく、そのプロパティに基づいて型を指定するにはどうすればよいですか?
0
A
答えて
1
実際、オブジェクトの暗黙のインターフェイスに依存することができます。
というクラスがあり、その中にincludeUnassignedLocations
とcontractStatusCodes
という名前があるとします。これら2つのプロパティを持つMyKnockoutInterface
も定義しました。クラスが明示的にインターフェイスを実装していない場合でも、それは暗黙的に実装されます。したがって、MyKnockoutInterface
タイプを予期するものはMyKnockoutClass
で動作します。
class MyKnockoutClass {
includeUnassignedLocations: KnockoutObservable<boolean>;
contractStatusCodes: KnockoutObservableArray<number>;
}
interface MyKnockoutInterface {
includeUnassignedLocations: KnockoutObservable<boolean>;
contractStatusCodes: KnockoutObservableArray<number>;
}
function doSomething(object: MyKnockoutInterface) {
}
var object = new MyKnockoutClass();
doSomething(object);
2
はい、インタフェースではなく、オブジェクトのリテラル表記を使用して型を指定できます。 getMyObject()
の結果に2つのプロパティがない場合、またはプロパティ自体のタイプが間違っている場合、次のコードでタイスクリプトエラーが発生します。
var myObject: {
//this can be any type which implements these properties
includeUnassignedLocations: KnockoutObservable<boolean>,
contractStatusCodes: KnockoutObservableArray<number>;
};
myObject = getMyObject();
//do something with myObject here, safe in the knowledge it has those two properties
関連する問題
- 1. typescriptのクラスメソッドに関数型インターフェイスを適用するにはどうすればよいですか?
- 2. オブジェクトのプロパティに基づいてセットをソートするにはどうすればよいですか?
- 3. 子コンテンツに基づいてコンポーネントのプロパティを更新するにはどうすればよいですか?
- 4. いくつかのMongoActionプロパティに基づいて異なる条件に異なるWriteConcernを設定するにはどうすればいいですか?
- 5. プロパティに基づいてC#リストをソートするにはどうすればよいですか?
- 6. 再帰型エイリアスに基づく値を初期化するにはどうすればよいですか?
- 7. React:コンポーネントをすべてではなく1つのプロパティに基づいて更新するにはどうすればよいですか?
- 8. typescriptのオブジェクトからいくつかのプロパティを削除するにはどうすればよいですか?
- 9. 親のAlternateIndexに基づいて子のスタイルを設定するにはどうすればよいですか?
- 10. プリミティブ型ではなくカスタムJavaオブジェクトに基づいてリストから重複を削除するにはどうすればよいですか?
- 11. 基準に基づいてグループ内で「パーティションバイ」を行うにはどうすればよいですか?
- 12. Arraylist内のオブジェクトをプロパティに基づいて並べ替えるにはどうすればいいですか?
- 13. タイプに基づいてジェネリッククラスのリストを設定するにはどうすればよいですか?
- 14. Mavenプロファイルに基づいて特定のREST Urlをヒットするにはどうすればよいですか?
- 15. SqlAlchemy関係に基づいてモデルのデフォルトを設定するにはどうすればよいですか?
- 16. htmlのenum値に基づいてテキストを設定するにはどうすればよいですか?
- 17. 特定の文字に基づいてワードラップを実行するにはどうすればよいですか?
- 18. 特定の条件に基づいてテーブルを更新するにはどうすればよいですか?
- 19. Androidでは、ファイルタイプに基づいてアプリケーションセレクタを表示するにはどうすればよいですか?
- 20. TypeScriptで実装されたインターフェイスでコンストラクタオーバーロードを実行するにはどうすればよいですか?
- 21. 設定に基づいてライブラリパスを変更するにはどうすればよいですか?
- 22. ユーザ設定に基づいてCSSスタイルをロードするにはどうすればよいですか?
- 23. 設定に基づいてCPackパッケージファイル名を変更するにはどうすればよいですか?
- 24. Informatica PC:スカラークエリ結果に基づいてフローを決定するにはどうすればよいですか?
- 25. Kivy - 表示サイズに基づいてウィンドウサイズを設定するにはどうすればよいですか?
- 26. SHA1コードに基づいてGitオブジェクトタイプを特定するにはどうすればよいですか?
- 27. インターフェイスでIList を定義するにはどうすればいいですか
- 28. 依存型プロパティを参照型として定義するにはどうすればよいですか?
- 29. 拡張子に基づいて適切なプログラムでファイルを開くようにTortoiseHgを設定するにはどうすればよいですか?
- 30. raphael.jsでフォントテキストを10ピクセルでなく10ポイントに指定するにはどうすればよいですか?
これは、私が投稿したソリューションよりも優れた練習に思えます。それは確かに控えめな構文であり、インターフェース名を持つことは、そのプロパティが何であるかを明確にすることを意味します。 – Tim