Node.js で JavaScript と TypeScript を混在させる 質問する

Node.js で JavaScript と TypeScript を混在させる 質問する

Node.js の一部をプレーン ES6 で使用しながら、同じプロジェクト内でいくつかの Typescript モジュールを混在させることは可能ですか?

requireたとえば、TypeScript で定義されたいくつかの型をプレーンな ES6 ファイルにインポートしますか?

ベストアンサー1

はい、可能です。

以下のTypeScriptコンパイラオプションを組み合わせる

  1. --allowJs

    JavaScriptとTypeScriptの混合ソースを明示的にサポート

  2. --outDir

    すべてのファイルがトランスパイルされるため、結果のJavaScriptを別のディレクトリに出力する必要があります。そうしないと、入力.jsファイルが上書きされてしまいます。1

  3. --checkJs

    これは完全にオプションです。指定すると、コンパイラは JavaScript ファイルを型チェックし、TypeScript ファイルの場合と同様にエラーを報告しますが、それ以外の場合は不整合を許容します。

TypeScript ファイルで宣言された型を JavaScript ファイルで使用することは、確かに可能です。

TypeScript は、実際に Visual Studio Code などのツールのすべての JavaScript インテリセンスを強化します。

型はJSDocに配置できる2コメント。これらのコメントは、TypeScript ( .ts// .tsx).d.tsファイルからインポートされた型を参照できます。Visual Studio Code などの IDE では、これらのコメント内で構文の強調表示と自動補完が提供されます。

ただし、注意点があります。JavaScriptには型を表すマニフェスト構文がないため、個別にインポートすることはできず、価値インポートされます。これは、以下に示すように、TypeScript の宣言のマージによって最も簡単に実現できます。

例:

アット

export default createThing;

function createThing(...args): createThing.Thing  {...}

namespace createThing {
  export interface Thing {...}
}

b.js

import createThing from './a';

/**
 * @param {createThing.Thing} thing
 */
export function takesThing(thing) {}

ノート:

1:フラグ--outDirを追加で指定する場合は必要ありません--noEmit。これは、次のようなツールを使用する場合に行います。システムJS(とプラグイン-Typescript) またはウェブパック(とtsローダー)を使用してTypeScriptトランスパイラをホストします。TS ノード

2: 呼ばれているがJSDocコメントはTypeScript型システムのコンテキストで解釈されます。ないJSDocシステム。TypeScriptやGoogleのクロージャコンパイラは、事実上、JSDoc 構文を独自の目的のために乗っ取り、その構造に潜在的に矛盾する意味を与えます。これは通常問題にはなりませんが、これらのコメントの適用性と正確性、およびそれらが参照または宣言する型の互換性を判断することが困難な場合があるため、知っておく価値はあります。

備考:

この質問と回答は、JavaScript ファイルで使用するための型のインポートに関するものですが、コンパイラが式の値から型を推測するため、インポートはほとんどの場合不要です。

また、JSDoc スタイルの型注釈を大量に記述する必要がある場合は、JSDoc で型を表現する構文が扱いにくいため、ファイルを TypeScript に変換する方がほぼ間違いなく良いことも言及しておく価値があります。オプションのおかげで--allowJs、上記のようにファイルごとにこれを実行できます。

おすすめ記事