私は自分のライブラリとサードパーティのライブラリの両方を使用しています。 「typings」ディレクトリにはJqueryおよびWinRTの一部が含まれていますが、どのように作成されますか?
問題のライブラリ、ライブラリの作成方法、探している精度のレベルに応じて、いくつかのオプションが利用できます。オプションをおおまかに降順で確認してみましょう。
最初に必ずDefinitelyTyped( https://github.com/DefinitelyTyped/DefinitelyTyped )を確認してください。これは、文字通り何千もの.d.tsファイルでいっぱいのコミュニティリポジトリであり、使用しているものが既にそこにある可能性が非常に高いです。また、NPMが公開する.d.tsファイルの検索エンジンであるTypeSearch( https://Microsoft.github.io/TypeSearch/ )も確認する必要があります。これには、DefinitelyTypedよりもわずかに多くの定義が含まれます。いくつかのモジュールは、NPMディストリビューションの一部として独自の定義を出荷しているため、独自のモジュールを作成する前に、それが当てはまるかどうかも確認してください。
TypeScriptは--allowJs
フラグをサポートするようになり、.jsファイルでより多くのJSベースの推論を行うようになります。 --allowJs
設定と一緒にコンパイルに.jsファイルを含めてみて、十分な型情報が得られるかどうかを確認できます。 TypeScriptは、これらのファイル内のES5スタイルのクラスやJSDocコメントなどを認識しますが、ライブラリが奇妙な方法で初期化されるとトリップする可能性があります。
--allowJs
を使ってみる--allowJs
で適切な結果が得られ、より良い定義ファイルを自分で作成したい場合は、--allowJs
と--declaration
を組み合わせて、ライブラリのタイプでのTypeScriptの「最良の推測」を確認できます。これによりまともな出発点が得られ、JSDocコメントが適切に記述されており、コンパイラーがそれらを見つけることができた場合、手書きのファイルと同じくらい良いかもしれません。
--allowJs
が機能しなかった場合は、dts-gen( https://github.com/Microsoft/dts-gen )を使用して開始点を取得できます。このツールは、オブジェクトのランタイムシェイプを使用して、使用可能なすべてのプロパティを正確に列挙します。プラス面では、これは非常に正確になる傾向がありますが、このツールは、追加のタイプを取り込むためのJSDocコメントのスクレイピングをまだサポートしていません。次のように実行します:
npm install -g dts-gen
dts-gen -m <your-module>
これにより、現在のフォルダーにyour-module.d.ts
が生成されます。
後ですべてを行い、しばらくの間型を使用しない場合は、TypeScript 2.0で次のように記述できます。
declare module "foo";
import
型の"foo"
モジュールをany
できます。後で対処したいグローバルがある場合は、
declare const foo: any;
foo
変数が得られます。
Ryanの説明のようにtsc --declaration fileName.ts
を使用するか、プロジェクトでdeclaration: true
をすでに持っていると仮定して、tsconfig.json
のcompilerOptions
の下にtsconfig.json
を指定できます。
これに対処する最良の方法(宣言ファイルが DefinitelyTyped で利用できない場合)は、ライブラリ全体ではなく、使用するものだけの宣言を書くことです。これにより、作業が大幅に削減されます。また、コンパイラーは、メソッドの欠落について不満を言うことによって支援します。
Ryanが言うように、tscコンパイラには--declaration
ファイルから.d.ts
ファイルを生成する.ts
スイッチがあります。 (バグがない限り)TypeScriptはJavascriptをコンパイルできるはずなので、既存のjavascriptコードをtscコンパイラーに渡すことができます。
http://channel9.msdn.com/posts/Anders-Hejlsberg-Steve-Lucco-and-Luke-Hoban-Inside-TypeScript at 00:33:52で説明されているように、彼らはツールを構築しましたWebIDLおよびWinRTメタデータをTypeScript d.tsに変換する
Script#またはSharpKitをサポートするサードパーティのJSライブラリの既存のマッピングを探します。これらのC#から.jsへのクロスコンパイラのユーザーは、現在直面している問題に直面し、サードパーティのライブラリをスキャンしてスケルトンC#クラスに変換するオープンソースプログラムを公開している可能性があります。その場合は、スキャナープログラムをハックして、C#の代わりにTypeScriptを生成します。
それに失敗すると、サードパーティのlibのC#パブリックインターフェイスをTypeScript定義に変換する方が、ソースJavaScriptを読み取って同じことを行うよりも簡単な場合があります。
私の特別な関心は、SenchaのExtJS RIAフレームワークであり、Script#またはSharpKitのC#解釈を生成するプロジェクトが公開されていることを知っています。
単一のTypeScript定義ファイルを作成するPowerShellと、最新のJavaScriptを使用した複数の*.js
ファイルを含むライブラリを次に示します。
最初に、すべての拡張子を.ts
に変更します。
Get-ChildItem | foreach { Rename-Item $_ $_.Name.Replace(".js", ".ts") }
次に、TypeScriptコンパイラを使用して定義ファイルを生成します。多数のコンパイラエラーが発生しますが、それらは無視できます。
Get-ChildItem | foreach { tsc $_.Name }
最後に、すべての*.d.ts
ファイルを1つのindex.d.ts
に結合し、import
ステートメントを削除して、各exportステートメントからdefault
を削除します。
Remove-Item index.d.ts;
Get-ChildItem -Path *.d.ts -Exclude "Index.d.ts" | `
foreach { Get-Content $_ } | `
where { !$_.ToString().StartsWith("import") } | `
foreach { $_.Replace("export default", "export") } | `
foreach { Add-Content index.d.ts $_ }
これは、多くの定義を含む単一の使用可能なindex.d.ts
ファイルで終わります。