[解決済み】既存のJavaScriptライブラリから.d.tsの「型付け」定義ファイルを作成する方法は?
質問
自作とサードパーティーの両方のライブラリをたくさん使っています。 typings"ディレクトリにJqueryとWinRT用のものがあるようですが、どのように作成されるのですか?
解決方法は?
問題のライブラリ、その書き方、どの程度の精度を求めるかによって、いくつかの選択肢があります。その選択肢を、望ましい順におおまかに確認してみましょう。
すでにあるのかもしれない
常にDefinitelyTypedをチェックすること ( https://github.com/DefinitelyTyped/DefinitelyTyped をご覧ください。これは文字通り何千もの.d.tsファイルでいっぱいのコミュニティリポで、あなたが使っているものがすでにそこにある可能性が非常に高いのです。 また、TypeSearch ( https://microsoft.github.io/TypeSearch/ これはNPMで公開されている.d.tsファイルの検索エンジンです; DefinitelyTypedより少し多くの定義があります。 また、いくつかのモジュールはNPM配布の一部として独自の定義を配布していますので、独自の定義を書こうとする前にそのようなことがないか確認してください。
たぶん、あなたは1つも必要ない
TypeScriptは現在
--allowJs
フラグを使用して、.js ファイルでより多くの JS ベースの推論を行うようになります。コンパイル時に、.js ファイルを
--allowJs
を設定して、十分な型情報を得られるかどうかを確認します。TypeScriptはこれらのファイル内のES5スタイルのクラスやJSDocコメントなどを認識しますが、ライブラリが奇妙な方法で自身を初期化している場合は、トリップしてしまうかもしれません。
で始める
--allowJs
もし
--allowJs
で十分な結果が得られたので、より良い定義ファイルを自分で書きたい場合は、次のように組み合わせます。
--allowJs
と
--declaration
をクリックすると、ライブラリの型に対するTypeScriptの"best guess"が表示されます。もし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";
を実行することで
import
その
"foo"
モジュールで、型は
any
. もし、後で処理したいグローバルがある場合は、次のように書きます。
declare const foo: any;
を与えることになります。
foo
変数を使用します。
関連
-
[解決済み] エラー TS2322: タイプ 'Object[]' はタイプ '[Object]' に割り当てられません。
-
[解決済み] TypeScript getting error TS2304: cannot find name ' require'.
-
[解決済み] TypeScriptでグローバル変数を作成する
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] モジュール 'module-name' の宣言ファイルが見つかりませんでした。'/path/to/module-name.js' は暗黙のうちに 'any' 型を持っています。
-
[解決済み] オブジェクトのキーと値に*ngForでアクセスする
-
[解決済み] クラス定数を実装するには?
-
[解決済み] Typescript は ?演算子をサポートしていますか?(そして、それは何と呼ばれているのでしょうか?)
-
[解決済み] types/* を `dependencies` と `devDependencies` のどちらに入れるかは、どのように決めたらよいですか?
-
[解決済み] 定義ファイル(*d.ts)にクラスをインポートする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「TS2532: Object is possibly 'undefined'」というエラーを解決するにはどうしたらいいですか?
-
[解決済み] TypeScriptの円形型参照
-
[解決済み] Apollo Serverでコンテキストオブジェクトを正しく入力するにはどうすればよいですか?
-
[解決済み] TypeScriptの「as const」の意味とその使用例とは?
-
[解決済み] Typescript ReferenceError: exports が定義されていません。
-
[解決済み] オブジェクトの型は「不明」です typescript generics
-
[解決済み] Typescriptでオブジェクトのプロパティを結合する方法は?
-
[解決済み] TypeScriptでオブジェクトに動的にプロパティを割り当てるには?
-
[解決済み] TypeScriptのファイル変更時にts-nodeを監視して再読み込みする方法
-
[解決済み】ランタイムにオブジェクトのクラス名を取得する