私はしばらくの間Closure Compilerを使用してきましたが、データ型のランタイム検証を行うエンジンがあるかどうか疑問に思っていました。
事実、タイプによって人は間違いを少なくすることができます。たとえばHaskell
、 ではInt
、どのデータ型にも値が必要です。値が許可されていない場合は、null
またはundefined
を値に指定することはできません。とにかく、 nullableMaybe Int
にするようなラッパーを指定できます。つまり、値が null かどうか、null でない場合は値を抽出できます。ただし、最初に null かどうかを確認する必要があります。最初に値にアクセスする方法はありません。
Closure Compilerは、データ型を静的に検証するのに非常に優れています。より強力な null/未定義の検証など、いくつかのものが欠けています。Closure Compilerから逃れる他のものは、サーバーからダウンロードされたデータの型チェックです。サーバーを信頼していても、仕様が変更され、コードも変更されます。この種の不一致はテストで検証できますが、これらの検証をコードで直接行うことができればよりよいでしょう。タイプを一致させようとして見つかったエラーをログに記録することさえできます。
次のコードは、サーバー応答の最小限の例です。
/**
* Server result data types
* @param {T} t [description]
* @template T
*/
ServerResult = {
/**
* Result code from server
* @type {Number}
*/
code: 0,
/**
* Result data from server
* @type {T}
*/
data: null,
/**
* Message of the server in case something didn't go as expected
* @type {String}
*/
message: ''
};
Result.data
別のデータ型 (レコードなど) の場合もあります。今私がやっていることは、デフォルトのインスタンスに含まれる型を再帰的にチェックし、それをダウンロードしたバージョンと比較することです。
- これを行うより良い方法はありますか?
- ホイールを書き直す代わりに使用できるライブラリはありますか?
- これはナンセンスですか?