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