web-dev-qa-db-ja.com

TypeScriptに切り替えずにTypeScriptタイプをJavaScriptモジュールに追加するにはどうすればよいですか?

タイトルは少しわかりにくいかもしれませんが、短いタイトルではもっと簡潔に説明することはできませんでした。しかし、これは私がやりたいことです:

  • TypeScriptではなくJavaScriptで記述されたnpmモジュールがあります。
  • このモジュールのユーザーの一部はTypeScriptを使用しているため、JavaScriptコードにタイプアノテーションを提供できたらいいですね。
  • しかし、私はTypeScriptに切り替えたくありませんが、純粋なJavaScriptを使い続けたいです。

だから、私が探しているのは、ある種の外部型宣言マニフェスト、またはそのようなものです。

これは可能ですか?もしそうなら、どうですか?

これがTypeScriptユーザーにとってナイーブな質問である場合はご容赦ください。しかし、私はTypeScriptの経験がまったくないため、Webを検索する対象がわかりません。多分誰かが私が探しているものに名前を付けることによって正しい方向に私を押すことができれば、私は自分で解決策を見つけることができます。

11
Golo Roden

作成するのは Definition Files です。これらのファイルは、JavaScriptを記述するために使用されます。

簡単にするために、addという関数があるとします。これは、2つの数値または数値の配列を取ります。

index.js

exports.add = function add(a, b) {
  if(args.length == 1) return a.reduce((sum, val) => sum + val, 0)
  return a + b; 
}

次に、定義ファイル.d.tsを作成できます。これにより、JavaScript関数が記述されます。ファイル名とファイル構造は、typesなどのルートフォルダー内のJSと同じにしてください。

types/index.d.ts

// Accepts two numbers
export declare function add(a: number, b: number): number
// Accepts an array of numbers
export declare function add(a: number[]): number

このファイルが行うことは、ロジックなしでfunctions/classes/interfaces/modulesなどをすべて記述することだけです。私の例からわかるように、ファイル内でオーバーロードを作成できます。これにより、関数を使用できる複数の方法を定義できます。このファイルはJSDocもサポートしているので、私もそれを使用します。

次に、package.jsonを変更する必要があります。これにより、TypeScriptパーサーに、このパッケージの定義を見つける場所が通知されます。

{
  "types": "types/index.d.ts"
}

基本的に、.d.tsを作成するために必要なことはこれだけです。

12
Get Off My Lawn