1. ホーム
  2. typescript

[解決済み] TypeScriptの "*.d.ts "について

2022-03-20 13:53:47

質問

気になるのは *.d.ts というのも、私はTypeScriptの初心者なのです。そして、この種のファイルは、C++でいうところの "head file" のようなもので、JS専用のものだと、ある人から教えてもらったのです。しかし、私は純粋なJSファイルを *.d.ts を強制的に変更しない限り *.js から *.ts . というわけで、3つのファイルを用意しました。 JS ファイル、TS ファイル、そして *.d.ts ファイルを作成します。


  1. 両者の関係は?

  2. を使用するにはどうすればよいのでしょうか? *.d.ts ファイルを作成できますか?を削除してもいいということでしょうか? *.ts ファイルを永久に保存しますか?

  3. その場合、どのようにすれば *.d.ts ファイルは、どの JS ファイルが自分自身にマッピングされているかを知っていますか?


どなたか例を挙げていただけると大変助かります。

どのように解決するのですか?

"d.ts"ファイルは、JavaScriptで書かれたAPIに関するtypescriptの型情報を提供するために使用されるものです。jQueryやunderscoreのような既存のJavaScriptライブラリを使っている場合です。これらをtypescriptのコードから利用したいのです。

jqueryやunderscoreなどをtypescriptで書き直すのではなく、型アノテーションだけを含むd.tsファイルを書けばいいのです。そうすれば、typescriptのコードから、純粋なJSライブラリを使用しながらも、静的型チェックというtypescriptの利点を得ることができるのです。

これは、TypeScriptの制約で、.ts"という拡張子を import ステートメントを使用します。そのため、あるファイルを参照するときに、たとえば my-module.js がある場合は my-module.d.ts の隣にある場合、TypeScriptはその内容をインクルードする。

src/
  my-module.js
  my-module.d.ts
  index.ts

<サブ my-module.js

const thing = 42;

module.exports = { thing };

<サブ my-module.d.ts

export declare const thing: number;

<サブ index.ts

import { thing } from "./my-module"; // <- no extension

// runtime implementation of `thing` is taken from ".js"
console.log(thing); // 42

// type declaration of `thing` is taken from ".d.ts"
type TypeOfThing = typeof thing; // number