定数と変数
/**
* 定数と変数
*/
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";