不明なオブジェクトが特定のタイプであるかどうかを(実行時に)確認するにはどうすればよいですか?それを正式にそのタイプに変換し、それと何かをしますか?オブジェクトがGoogleクローズのタイプであるかどうかを確認し、それを変換しますか?
私はこのような何かをしたい:Fruit
は、属性の名前と色を持つクラスがある
const /** {Object} */ someObject = {name: 'Apple', color: 'Red'};
if (someObject is Fruit) {
// Convert to {Fruit} and do something with it.
return /** {Fruit} */ (someObject);
}
。
より具体的には、JSON.parse
からオブジェクトを取得しているので、具体的には、コンストラクタを使用してFruit
オブジェクトを作成することはできません。
は、これまで私が試してみた:これはfalseに
if (someObject instanceof Fruit)
解決します。
const aFruit = /** @type {Fruit} */ someObj;
をしかし、私はそれはまだ
Fruit
として扱われるプロパティの名前や色を持っていない
someObj
を渡すとき、これは実際には、つまり...何もしていないようです。そして、私が試してみました。
もっと複雑なカスタムソリューションが必要なのでしょうか?つまり、これはClosureに組み込まれているのですか、それとも私自身で属性をチェックするだけですか?
閉鎖型は、コンパイル時にのみ存在します。 – SLaks
'/ ** @type {Fruit} * /'がどのように動作するのかについての説明がありますが、ここではうまくいかない理由は「自分ではできません。 。 – hubatish
'instanceof'テストは、オブジェクトが' new'で作成されたとき(あるいはJavaScriptの 'property'値が手作業で配列されているとき)にのみ動作します。プロパティからどのタイプのオブジェクトをテストする方法がありますか?そうであれば、最初の例に示すようにタイプキャストを使うことができます。 – owler