型が付いてないパッケージを Deno で使いたい場合に、使う側で型をあてるためのプラグマで、@deno-types
というものがありました。
例えば、npm:react
パッケージには型情報が同梱されていないため、以下のように単純に使うと全ての型が any になってしまいます。
import React, { useState } from "npm:react@^19.0.0";
// React と useState は any になってしまう
これに型をあてるためには以下のように記述します。
// @deno-types="npm:@types/react@^19.0.0"
import React, { useState } from "npm:react@^19.0.0";
この記法を使うことで、React
や useState
に正しく型が付いた状態になります。
実はこの記法の代替記法で @ts-types
というプラグマが Deno 1.43 から使えるようになっています (リリースブログでは記載が漏れてしまっていました)
// @ts-types="npm:@types/react@^19.0.0"
import React, { useState } from "npm:react@^19.0.0";
この記法でも、React
や useState
に型が付いた状態になります。今後はこちらの @ts-types
の方が推奨の書き方になります。
参考: https://docs.deno.com/runtime/reference/ts_config_migration/#providing-types-when-importing
@ts-types
が追加されたモチベーションとしては、Deno が JSR に対応するにあたって、モジュール解決機能周りで Deno
キーワードの利用を減らしたかったという事があったようです。
なお、公式ドキュメント上では、このコミットで、@deno-types
が削除されて、@ts-types
に書き変わっています。
実装的にはこちらの PR で @ts-types
の扱いが追加されています