2021/09/08

TypeScript入門 第6回 モジュール定義

これまで, ソースコードはindex.tsファイルに書いてきました. プログラムもまとまってきましたので, ソースファイルを管理しやすくするために, ファイルを分割してモジュールを定義します.

1)ソースファイルを分割する

srcディレクトリにrpn.tsファイルを作り, index.tsファイルのほぼすべての内容, データ型の定義と関数定義をコピーします. index.tsファイルに関数定義を残したままにしておくと, コンパイラがエラーを報告します.


rpn.tsファイルのparse関数とcalc関数にexportを付けるとエラーが解消します


index.tsから関数定義を削除すると, 関数が見つからないとコンパイラはエラーを報告します.

この結果から分かったことは次の通りです.

  1. 新しく作ったrpn.tsファイルにindex.tsから関数をコピーしただけでは, rpn.tsファイルの内容はindex.tsと同じモジュールにあるものとして扱う.
  2. rpn.tsファイルで公開する関数にexportを付けるとrpn.tsファイルの内容を別のモジュールとして扱う.

TypeScriptの仕様を確認したわけではないので, 間違えていたらスミマセン.

2)モジュールから関数をインポートする

関数をインポートしてみます. 

import {parsecalcfrom './rpn'

let input = process.argv.slice(2process.argv.length)
// 計算してみる
console.log('解析結果'parse(input))
console.log('計算結果'calc(parse(input)))

1行目のimport文を追加すると, コンパイルエラーは解消しました. この方法であれば, index.tsを修正せずに済みますが, rpn.tsファイルで定義してある関数であることを明示する方が私の好みです.

import * as rpn from './rpn'

let input = process.argv.slice(2process.argv.length)
// 計算してみる
console.log('解析結果'rpn.parse(input))
console.log('計算結果'rpn.calc(rpn.parse(input)))

3)まとめ

この記事では, ソースファイルを分割してモジュールを定義する方法を調べました. ただし, この記事の内容はコンパイラの応答から推測した結果をまとめただけであり, 言語仕様などを確認する必要があります. また, 実行環境等によって違いがあるようなので注意が必要です. 

最後に, この記事で使用したNode.jsとTypeScriptのバージョンは次の通りです.

PS C:\TSWork\Module> node --version
v14.17.5
PS C:\TSWork\Module> .\node_modules\.bin\tsc --version
Version 4.4.2
PS C:\TSWork\Module>

0 件のコメント:

コメントを投稿

ヒューマン・リソース・マシーン 入社41年目−並べ替えよ

目次 1)課題 0を終端とした文字列がいくつか流れてきます。各文字列に対してソート(並べ替え)を行い、小さい順(昇順)に右側へ運んでください。 2)状況の確認 この問題では, 予めコードが入っています. このコードを実行して, 何をするコードなのか確かめます.  左のコンベアから...