web-dev-qa-db-ja.com

別のファイルのJSDoctypedef

すべてのカスタムタイプを個別のファイルで定義できますか(例:types.jsdoc)、アプリケーション全体で再利用できるように?それを行う正しい方法は何ですか?

/**
 * 2d coordinates.
 * @typedef {Object} Coordinates
 * @property {Number} x - Coordinate x.
 * @property {Number} y - Coordinate y.
 */
23

モジュールでタイプを定義できます(例:typedefs.js)。このモジュールにはJSDoctypdefが含まれており、未使用のプロパティを簡単にエクスポートできます。

// typedefs.js
/**
 * @typdef foo
 * @property {string} bar
 */

// etc.

exports.unused = {};

これを使用するには、次のtypdefを参照する必要があるモジュールをインポートします。

const typedefs = require("./typedefs");
/** @type {typedefs.foo} */
const fb = { bar: "hello" };

typedefs.js@moduleまたは@namespaceとして注釈を付けることをお勧めします。 「tsd-jsdoc」を使用してtypes.d.tsファイルを生成し、TypeScriptがモジュールと名前空間を解釈する方法のために、typedefs.jsファイルに@namespaceとして注釈を付け、各typedefをその名前空間のメンバーとして文書化しました。

/**
 * @namespace typedefs
 */

/**
 * @typedef foo
 * @property {string} bar
 * @memberof typdefs
 */

お役に立てば幸いです。

3
Darren

VSCodeを試してみましたが、エディターで別のファイルを開いた場合にのみ機能します。そうでない場合、外部typedefは任意のように入力されます

2

私は通常、プロジェクトで同様のことを行いますが、ファイルに名前を付けるために拡張子.jsを使用する点が異なります。 Webstormは完全に機能し、タイプをチェックしてオートコンプリートを正常に実行できます。 .jsdoc拡張子(チェックしたばかり)を認識しないため、ファイルにコードステートメントが含まれていない場合でも.jsに固執します。

1
Lucio Paiva

これはTypeScriptフレーバーのJSDoc固有の回答ですが、 トリプルスラッシュディレクティブ を使用して別のファイルからすべてのタイプを「インポート」することに成功しています。これには、リンターやバンドラーを混乱させる可能性のある未使用のimportを実際に追加しないという利点があります。

次のように、共有タイプをtypedefs.jsという1つのファイルに入れています。

// typedefs.js
/**
 * @typedef {Object} Foo
 * @property {string} bar
 */

/**
 * @typedef {Object} Baz
 * @property {number} buzz
 */

次に、他のファイルで/// <reference path="typedefs.js" />を使用して、次のような共有タイプにアクセスします。

// randomThing.js
/// <reference path="typedefs.js" />

/**
 * Turn a Foo into a Baz
 *
 * @param {Foo} a
 * @return {Baz}
export function (a) {
  return { buzz: a.bar.length };
}

ただし、注意が必要なのは、typedefs.jsがコメントで参照されているだけで、ロールアップなどのバンドラーがそれを完全に見逃していることです。そのため、いくつかの定数をエクスポートし、少なくとも1つの場所にインポートする古いconsts.jsと組み合わせています。そうすれば、typedefは引き続きロールアップ出力に含まれます。

他の誰かがこれがお役に立てば幸いです。

p.s.ロールアップは、ツリーの揺れのためにtypedefs.jsがある場合でも、純粋なJSDoc import './typedefs.js'ファイルを完全に除外します。 --no-treeshakeを使用してロールアップを実行し、これらのコメントをロールアップ出力に保持する必要があります。

0
William Hilton