1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

超基本!import {} とするのと{}をつけないので何がちがうの?

1
Posted at

TypeScriptのimportの仕方には二種類あります。

// 名前付きimport
import { readFile } from 'example.ts';

// default import
import readFile from 'example.ts';

私はいつも適当に使える方を使っているのですが、
ふと、ちゃんと理解してみようと思ったので軽くまとめます!

→ 急いでいる方はまとめからどうぞ

それぞれの違い

{}が付くのは名前付きimport

これは、
「example.tsの中からreadFileだけ取り出す」
という意味になります。

example.tsの中にはもしかして

export function readFile() {
// 実装
}

export function writeFile() {
//実装
}

のように、いくつか関数が入っているのかもしれませんね。
もちろん、そのファイルに一つしか関数がなかったとしても使用できます。

重要な注意点

名前付きimportできるのは、

export function readFile() {}
export class FileReader {}
export type File = {};
export interface Options {}

のような名前付きexportされてるもの(default exportとなっていないもの)じゃないと名前付きimportはできません。

{}が付かないのはdefault import

対するdefault importは、イメージとしては、「そのモジュールのメインの1個を取り出す」
という意味。

default exportされているのものしかdefault importできないので注意。

export default function readFile() {}

こちらは好きな名前でimportできるので、
別ファイルで定義はreadFile()だけど、呼び出し先ではreadScriptFile()として扱いたければ、

import readScriptFile from 'example.ts';

として呼び出して、その名で使うことも可能。

名前変えてもいいの?!と思うけど、default exportできるものって1ファイルに1つだから、呼び出し先で名前が違くても、どれがどれのこと?って混乱することはないですよね。

名前付きだと、一つのファイルから何個かexportしている可能性があるから、import先で名前変えちゃうと、どれがどれのことを指しているのかよくわからないのでNGなんでしょうね。
なかなか理にかなっているな、と思います!

ただ、名前付きimportでも、

import { readFile as myReadFile } from './example';

のように名前変えてimportできるみたいですが、混乱するので今回は深追いしません。
へぇそうなんだ程度で。

余談

default exportは現場では嫌われている?という噂。

  • import側で名前を好きに変えられる
  • プロジェクト内で名前がバラバラになる可能性
  • 検索しにくい
  • 可読性が落ちる
  • VSCodeなら名前付きexportの方が以下自動補完やrename、参照追跡が正確に効く

などの理由で、あまり推奨されていないという噂を聞きましたが、真偽はわかりません。

ただ、自分は以前、
App()と定義して、import先ではProjectPage()のように使ってしまっていたことがあり、
たしかに参照追跡や検索がしずらかった経験があります。
それのせいで後からコードを見返した時に、理解に時間がかかったので、上記には少し共感できるところはあります。

まとめ

  • {} が付く import は「名前付き import」で、
    ファイル内で名前付きで export されているものを指定して取り出す方法
  • default import は「そのファイルの代表となる1つ」を取り出す方法で、
    import 側では好きな名前を付けられる
  • default export は 1ファイルに1つだけだが、
    名前付き export は 1ファイルから複数まとめて export できる
  • そのため、チーム開発や規模が大きくなるほど、
    名前付き export の方が安全で扱いやすい場面が多い
1
0
2

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?