私は自分のライブラリとサードパーティの両方で多くのライブラリを使用しています。"typings"ディレクトリにJqueryとWinRTのいくつかが含まれているのがわかります...しかし、それらはどのように作成されますか?
私は自分のライブラリとサードパーティの両方で多くのライブラリを使用しています。"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ベースの推論をさらに行います。コンパイルに.jsファイルを--allowJs
設定と一緒に含めて、十分なタイプ情報が得られるかどうかを確認できます。TypeScriptはこれらのファイル内のES5スタイルのクラスやJSDocコメントのようなものを認識しますが、ライブラリが奇妙な方法でそれ自体を初期化すると、作動する可能性があります。
--allowJs
Ifは--allowJs
あなたにまともな結果を与え、あなたはより良い定義ファイルを自分で書きたい、あなたは組み合わせることができます--allowJs
し--declaration
、ライブラリの種類に活字体の「最良の推測」を参照してください。これはまともな開始点を提供し、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
変数を与えます。
--declarations
両方を生成.js
し.d.ts
ます。つまり、1回のコンパイルを実行するだけで済みます。
--allowJs
--declaration
オプション(活字体1.8および2.0で試験)結合することができません。試してみると、次のようになりますerror TS5053: Option 'allowJs' cannot be specified with option 'declaration'
あなたはどちらかを使用することができtsc --declaration fileName.ts
ライアンなどが説明、またはあなたが指定することができますdeclaration: true
下のcompilerOptions
あなたにtsconfig.json
あなたがすでに持っていたと仮定するとtsconfig.json
、プロジェクトの下に。
tsc --declaration test.ts
、私はエラーを取得Cannot find name...
私は:)だから私のための宣言ファイルを作成しようとしているというタイプのために、私はそれらを宣言することができます前に、種類がありますか?
declaration: true
してみてくださいtsconfig.json
。
これに対処する最良の方法(宣言ファイルがDefinitelyTypedで利用できない場合)は、ライブラリ全体ではなく、使用するものだけに宣言を書き込むことです。これにより、作業が大幅に削減されます。さらに、コンパイラーは、不足しているメソッドについて文句を言うことで支援します。
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
これは、単一のTypeScript定義ファイルと、*.js
最新のJavaScriptを使用した複数のファイルを含むライブラリを作成する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
多くの定義を含む単一の使用可能なファイルで終わります。
独自のライブラリを作成する場合、次のように(TypeScriptコンパイラ)コマンド*.d.ts
を使用してファイルを作成できます tsc
(ライブラリをdist/lib
フォルダに構築していると想定)。
tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly
-d
(--declaration
):*.d.ts
ファイルを生成します--declarationDir dist/lib
:生成された宣言ファイルの出力ディレクトリ。--declarationMap
:対応する各「.d.ts」ファイルのソースマップを生成します。--emitDeclarationOnly
: '.d.ts'宣言ファイルのみを発行します。(コンパイルされたJSなし)(すべてのコマンドラインコンパイラオプションについては、ドキュメントを参照してください)
または例えばあなたのpackage.json
:
"scripts": {
"build:types": "tsc -d --declarationDir dist/lib --declarationMap --emitDeclarationOnly",
}
次に実行します:(yarn build:types
またはnpm run build:types
)
d.ts
ファイルを生成する方法を理解できず、インターフェースを使用することができません。例はありますか?
*.d.ts
ファイルを生成し、dist/lib
フォルダーに配置します。tsconfig.json
プロジェクトのルートにファイルが必要ですが、プロジェクトが動作するためにはそこにファイルが存在している必要があります。
Script#またはSharpKitをサポートするサードパーティのJSライブラリの既存のマッピングを探します。これらのC#から.jsへのクロスコンパイラのユーザーは、現在直面している問題に直面し、サードパーティのlibをスキャンしてスケルトンC#クラスに変換するオープンソースプログラムを公開している可能性があります。もしそうなら、C#の代わりにTypeScriptを生成するためにスキャナープログラムをハックしてください。
それに失敗すると、サードパーティlibのC#パブリックインターフェイスをTypeScript定義に変換する方が、ソースJavaScriptを読み取って同じことを行うよりも簡単な場合があります。
私の特別な関心はSenchaのExtJS RIAフレームワークであり、Script#またはSharpKitのC#解釈を生成するために公開されたプロジェクトがあることを知っています