6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

アンビエント宣言(declare)について理解する

Last updated at Posted at 2023-09-18

目次

  1. 背景
  2. アンビエント宣言(declare)とは
  3. 型定義ファイルとは

1.背景

Branded Type について理解する
この記事の中でdeclareキーワードが出てきた為です。

2. アンビエント宣言(declare)とは

declare var foo: any;
foo = 123; // allowed
  • 実装を定義しない宣言です。
  • 他の場所に存在するコードを記述しようとしていることをTypeScriptに伝えることができます。
  • 宣言された項目が実行時に存在しなければエラーになります。
    サンプルコードは実行時に
    foo = 123
    
    しかない為、エラーになります。

サンプルコード

3. 型定義ファイルとは

他のファイルで利用したい型(type/interface)を記述するファイルです。
この型宣言ファイルの定義に基づき、コンパイル時に型推論や型チェックが行われるようになります

例)JavaScriptで記述されたライブラリcalc.jsがあるとします。

calc.js
exports.sub = function(a, b) {
    return a - b;
}

型定義ファイルを以下のように宣言します。

calc.d.ts
export function sub(a: number, b: number): number;

これにより、exec.tsはcalc.d.tsを通してsub関数を認識することができ、コンパイルが通るようになります。

index.ts
import { sub } from "./calc";
console.log(sub(100, 1));

動作確認用リポジトリ
型チェックもされています。
image.png

DefinitelyTyped

DefinitelyTypedというコミュニティプロジェクトが存在しており、ここにはJavaScriptで記述されたライブラリの型宣言ファイルが集まっています。

DefinitelyTypedに登録されている型宣言ファイルは、npmコマンドでプロジェクトに取り込むことができます。

npm install --save @types/jquery

トリプルスラッシュディレクティブ

viteのvite/clientで以下のような型定義ファイルを見つけました。

vite-env.d.ts
/// <reference types="vite/client" />

///をトリプルスラッシュディレクティブと言います。

  • 1つのXMLタグを含む1行コメントです。
  • それが含まれる各ファイルの先頭でのみ有効です。
  • 別のトリプルスラッシュ・ディレクティブを含めて、単一行または複数行のコメントの前にのみ置くことができます。それらがステートメントまたは宣言の後にある場合は、通常のコメントとして扱われて特別な意味を持たなくなります。

型ディレクティブ

/// <reference types="..." />

型ディレクティブは型のimportのようなものです。
型定義ファイルに依存していることを示しています。

vite-env.d.ts
/// <reference types="vite/client" />

この例だとvite/types/clientに依存していることが分かります。
vitejs.dev guide Features

参考

参考になる記事を書いてくださった皆様ありがとうございました!

宣伝させてください!

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?