DenoにおけるTypeScriptの独自拡張について
はじめに
設定関連
compilerOptions.jsx: "precompile"
compilerOptions.jsxPrecompileSkipElements
compilerOptions.jsxImportSourceTypes
この
JSX Transformによって
<some-package>/jsx-runtime
を読み込むコードが生成されますが、
Denoはこのファイルに対して適切な型を当てることができないため、deno checkコマンドなどでエラーが発生する課題(#18203)がありました (
@ts-typesプラグマを使用することも不可)
この課題を解決するために
Deno v1.43.0で導入されたのが
compilerOptions.jsxImportSourceTypes
(
@jsxImportSourceTypes
プラグマ)です
deno.json{
"compilerOptions": {
"jsx": "react-jsx",
"jsxImportSource": "npm:react@18.3.1",
"jsxImportSourceTypes": "npm:@types/react@18.3.1"
}
}
型チェック
JavaScriptで書かれた外部ライブラリを
import
する際に、そのライブラリに対して任意の型定義を適用するための機能です
typescript// @ts-types="https://esm.sh/testdouble@3.16.1/index.d.ts"
export * as td from "https://esm.sh/testdouble@3.16.1/dist/testdouble.js";
Denoがリモートモジュールをダウンロードした際に、レスポンスに
X-TypeScript-Typesヘッダーが設定されていた場合、そこで指定されたURLに追加で問い合わせを行います。その追加の問い合わせにより返却された型定義ファイルを、元のモジュールの型定義として適用してくれます。
fast check
jsrパッケージに関する型チェックを高速化するために導入された独自の仕組みです
slow typesとは明示的に型が宣言されておらず、ソースコードを元に型定義を判断する必要のある関数などの定義を指します
パッケージの公開APIでslow typesが使用されていると、パッケージの利用者が型チェックをする際の実行時間の増加などの問題が起きうるため、
jsrではこのslow typesを公開APIに含むパッケージはできる限り公開しないことが推奨されます (
deno publishを実行する際にデフォルトでfast checkが実行されます)
リンク