TypeScript – 簡単な Webアプリを作ってみよう

オウルです。

簡単な偏差値計算Webアプリをさくっと作りながら TypeScript Modules を学習します。

module(変数、関数、クラス etc)は明示的に export で公開しなければ、外部に参照されません(グローバルスコープではない)。export した module を import することによって使用できます。

Modules import は、module loader を使用して相互に import します。module loader には CommonJS、RequireJS などがありますが、今回は ECMAScript 2015 で実装します。

ECMAScript 2015 modules 標準仕様:
対応ブラウザ一覧:

環境

バージョン

  • ASP.NET Core 2.2 MVC
  • TypeScript 3.6.2 + javascript
  • Chrome(dynamic import に対応している 63 以降)
※タイトルにもあるように DOM 操作に便利な JQuery は使用しません(因みに JQuery は import 可能です)

範囲外

  • TypeScript のインストール
  • ASP.NET Core MVC サーバサイドの実装

Visual Studio を使って ASP.NET Core MVC プロジェクトに TypeScript を npm でインストールする方法は、別の機会に紹介したいと思います。

ビュー

10人の数学の点数をテキストボックスに入力して、計算ボタンをクリックすると「平均」「分散」「標準偏差」「偏差値」を計算して表示するようにします。

Index.cshtml

module の動的インポート

import キーワードを関数として呼び出して、モジュールを動的にインポートします。非同期処理の最終的な完了処理、結果を Promise で返します。また、ECMAScript 2017 で導入された async/await でも実装できます。

対応ブラウザ一覧:

Promise

fetch での非同期処理を紹介しています。fetch の戻り値も Promise です。

MDN でもの下記のページを下までスクロールするとブラウザ実装状況も確認できます。

アロー関数

addEventListener のイベントをアロー関数で定義しています。this は使ってないけど。

Promise、アロー関数 ともに ECMAScript 2015 の目玉となる機能です。

モジュール

module 間の関係は、ファイルレベルでの import、export になります。

クラス、インタフェース、Enum など、今回は学習も兼ねて、各1ファイルにしています。というのも、chrome developer tools のネットワークを見て、パフォーマンスどうなの?ということについても触れるためです。

Main.ts

import 宣言方法

ここでは、import **** from “ファイル名” と宣言しています。import は、どういう構造で module が export されているかによります。
他にも、関数単位、 * 、別名などの宣言方法があります。詳細は公式サイトをご覧ください。

export 宣言方法

ここでは、export class と宣言しています。他では、export default class で宣言しています。

Each module can optionally export a default export. Default exports are marked with the keyword default; and there can only be one default export per module. default exports are imported using a different import form

この説明だけで default を理解するのは難しいですが、以下の TypeScript ドキュメントにある JQuery の import サンプルをみれば分かりやすいと思います。

今回は各クラスを1ファイルにしていますが、こんな export も可能です。

Student.ts

Main クラスで生成した生徒クラスです。

ECMAScript 2015 から class が定義できるようになりました。ECMAScript 2015 以降も拡張が継続しています。

class

Subject.ts

生徒クラスのメンバーである科目クラスです。今回は数学ですね。

SubjectType.ts

科目です。TypeScript では enum が使えます。

Statistics.ts

統計インターフェースです。TypeScript では interface が使えます。

StudentScoreStatistics.ts

Statistics インターフェースを実装したクラスです。implements ってあるから C# より Java よりの書き方かな。

StatisticsCalculatorImpl.ts

計算インターフェースです。

StatisticsOneDimCalculator.ts

計算インターフェースを実装したクラスです。正直 static メソッドが適当だと思いましたが、インターフェースで実装したい衝動に負けクラスにして DI しました。

因みに偏差値の数式は以下です。

\(T_i=\frac{x_i – \mu}{\sigma}\times 10+50 \)

実行

python で計算した結果とあってるから問題なさそうです。

パフォーマンス

なるほど・・・ bundle しないとダメだな。

ということで、「【初心者向け】はじめての ASP.NET Core 作りながら学習」の方で、いつか以下を紹介したいと思います。

  • TypeScript インストール
  • TypeScript トランスパイル
  • babel で es5 にトランスパイル
  • webpack で bundle

Java、C# を主要言語としてきた僕としては、静的型付けとクラスベースオブジェクト指向の TypeScript は実装しやすく、DOM インターフェイスもより意識することができます。あえて TypeScript を選択肢から外すということはないかな。今回は ジェネリクス 等は使わなかったけど便利な機能がたくさんあるので色々試してみたいと思います。

↓ もうレガシーブラウザに振り回されないアプリを作成できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA