0
0

More than 1 year has passed since last update.

Typescriptでimportしたりexportしたり

Last updated at Posted at 2022-05-20

定数と変数

/**
 * 定数と変数
 */
export const myName = 'Foo'

// 以下はlintに怒られる。
// javascriptでは許されるようだが、そもそも、import先では読み取り専用なのでlet である意味がない
export let yourName = 'Bar'

constはつけるが、letは使えなかった。importが読み込み専用なので当然といえば当然。

関数

/**
 * 関数
 */
export function alertFoo(): void {
    window.alert('Foo')
}

// 戻り値の型推論は効いていたが、unExported型単体を使用することは出来なかった
export function returnUnExportedType(): unExported {
    return { name: 'hoge' }
}

type unExported = {
    name: string
}

exportしていない型を戻り値にしても使えた。ただ、unExported型単体を使用することは出来なかった。

クラス

/**
 * クラス
 */
export class Bar {
    name: string
    constructor(name: string) {
        this.name = name
    }

    callName(): void {
        window.alert(this.name)
    }

    static callMyName(): void {
        window.alert('Bar')
    }

    returnFoo(): unExported {
        return { name: 'hoge'}
    }
}

クラスメソッドもインスタンスメソッドも使えるし、exportしていない型を戻り値に設定したメソッドも使えた。

タイプとインターフェース

/**
 * タイプ
 */
export type Foo = {
    name: string
    age: number
}

type Foo = {
    name: string
}

export default Foo

/**
 * インターフェース
 */
export interface Baz {
    name: string
    age: number
}

export default interface Foo  {
    name: string,
    age: number
}

interfaceは定義とdefault exportを同時にできるけど、typeは定義してからでないとできなかった。ただ、名前付きexportは定義と同時にできた。

名前空間

/**
 * 名前空間
 */
export namespace FooBar {
    // import先で使用できない
    function callName(): void {
        window.alert('FooBar')
    }

    // import先で利用できる
    export function exportedFunction(): void {
        window.alert('exportedFunction')
    }
}

namespace BarBaz {
    function callName(): void {
        window.alert('BarBaz')
    }

    // どうやって使うのか知りたい
    export function exportedFunction(): void {
        window.alert('exportedFunction')
    }
}

namespace Hoge {
    // import先で使えない
    function hoge(): void {
        console.log('hoge')
    }
  // import先で使える
    export function fuga(): void {
        console.log('fuga')
    }
}

export default Hoge
```typescript
クラスとは違って、namespace内の関数もそれぞれexportしないといけないみたい。exportしていないnamespace内の関数をexportすることもできてしまったけど、importできなかった。default exportはtypeと同様で、一旦定義しなければいけないみたい。

### import
```typescript
/**
 * 一行で書くこともできるし、複数行で書くこともできる
 */
// import default, { Bar, Foo, Baz } from "../exporter";
import { Bar, Foo, Baz, FooBar } from "../exporter";
import default from "../exporter";

/**
 *  import * as name "path"でインポートすると、そのファイルでexportされているすべてがimportされる
 *  import name "path"でインポートするとdefault exportされているものだけがimportされる
 */
import * as All from "../exporter";
0
0
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
0
0