31
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WebStormで手軽にJSON/BSONの型ヒント

Last updated at Posted at 2014-05-14

WebStorm(IntelliJ)のJavaScript静的解析はすごく便利ですね。サポートしているライブラリ/フレームワーク以外にも、TSDでTypeScriptのインターフェースを取り込めたり、自分で書いたコードを読んで推測してくれたり。自分のコードに JSdoc があるとそれがより高精度に。

...でも、それだけではどうしても型ヒントが付かないオブジェクトがあります。外から来たJSONメッセージだったり、MongoDBから読み込んだBSONだったり。存在すると信用していいプロパティなのに、どこにも実装がないがために、ドットでアクセスしたら Unresolved Variable が出ることがあります。

このとき使えるのが JSDoc3 の @typedef です。

JSONが間違いなくこういう形をしていたとして、

{
    "url": "http://qiita.com/",
    "rating": 5
}

こうすると警告出たりするんですよね。

var siteRating = incomingData.json;  // 外から来た上の形のJSON
tryToUse(siteRating.url); // ここでそんなプロパティないよと警告

警告にはならなくても、優先して補完されるワードに urlrating が出ないのは不便。

でもこう書くと...

/**
 * @typedef {Object} SiteRating
 * @property {string} url
 * @property {number} rating
 */

/** @type {SiteRating} */
var siteRating = incomingData.json;

このあとのコードで siteRating. まで打つと、なんと urlrating が補完できます。解析の設定がいくら厳しくても、これでもう警告は出なくなりました。

TypeScriptの文法で別ファイルにインターフェースを定義するまでもなく、ひとつの *.js の中だけで、実装がないものに手軽に仮想的な型を作ることができてすごく便利。JSDoc3 と WebStorm いいですね。

31
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?