🐕
設定ファイルに書く /** @type {import} */ って何?
概要
/** @type {typeName} */
コメントはJSDocの仕様。
波カッコ内にJSDocでサポートしている型を指定することでドキュメントできる。
https://jsdoc.app/tags-type.html
JSDocではプリミティブな型(string
,boolean
等)を指定できる他、@typedef
で型定義することも出来る(TSでのtype
みたいな機能)。
で、TypeScriptはこの仕様を拡張している。
“@type”タグを使用すれば、型名(プリミティブ、TypeScript宣言やJSDocの”@typedef”タグで定義されたもの)を参照することができます。 ほとんどのJSDoc型と、stringのような最も基本的なものからConditional Typesのような高度なものまで、あらゆるTypeScriptの型を使うことができます。
指定できる型がJSDocの型名 + TSの型になる。
またimportを使った参照も可能になる。
importを使用した場合、通常のimportと同じように定義に飛ぶことも出来る。
詳細
@type
に指定しないといけないのは型である。
/** @type {string} */
importを使った場合も型を指定する。
// @filename: Hoge.ts
export type Hoge = string;
// @filename: index.ts
/** @type {import('./Hoge').Hoge} */
const xxx = '';
値から型を使いたい場合はtypeof
する。
// @filename: Hoge.ts
export const Hoge = 'hogeee';
// @filename: index.ts
/** @type {typeof import('./Hoge').Hoge} */
const xxx = '';
node_modulesからimportする場合も考え方は同じ。
import {} from ‘’
するのと同じように型定義あるいは値を読み込んで指定する。
tailwind.config.jsの例
/** @type {import('tailwindcss').Config} */
module.exports = {
これは
import type { Config } from 'tailwindcss';
をJSDocコメントで付与していることに等しい。
参考にした投稿
Discussion