お正月なので、Node.jsをTypeScriptで動かして基本構文を勉強しますwww
まずはDockerでお勉強環境(動作確認する環境)を作ります。
環境構築
必要なファイルの作成
Dockerfileを以下の内容で作ります。
FROM node:20
# パッケージリストを更新し、vimをインストール
RUN apt-get update && apt-get install -y vim && apt-get clean
WORKDIR /app
次にdocker-compose.ymlを以下の内容で作ります。
services:
node-dev:
build:
context: .
dockerfile: Dockerfile
tty: true
volumes:
- .:/app
コンテナを立ち上げ、必要なもののインストール
コンテナを立ち上げ
docker compose up -d
コンテナの中に入り
docker compose exec node-dev bash
必要なものをインストールします。
npm install typescript ts-node ts-node-dev
# tsconfig.jsonファイルを作成
npx tsc --init
動作確認
test.tsファイルを作成し「console.log(‘test’)」と記載して、以下のコマンドで実行できます。
npx ts-node test.ts
Dockerファイルの修正
Dockerfileでpackage.jsonを参照して必要なもののインストールをするように修正します。
FROM node:20
# パッケージリストを更新し、vimをインストール
RUN apt-get update && apt-get install -y vim && apt-get clean
COPY package*.json ./
RUN npm install
WORKDIR /app
再度、コンテナを立ち上げ
docker compose up -d
コンテナの中に入り
docker compose exec node-dev bash
動作確認
npx ts-node test.ts
これでお勉強の準備完了です。
型定義を試してみる
TypeScriptといえば、型定義ということで、型定義の勉強をしてみます。
基本の型定義
以下の基本となる型定義を試してみます。
const 変数名: 型 = 値;
文字列に文字列を入れてみる
const name1: string = "ABC";
console.log(name1);
→ABCが出力される
文字列に数値を入れてみるとエラーになります。
const name2: string = 1;
console.log(name2);
→エラー
anyにすると何でも入れられちゃいます。
const name1: any = "ABC";
console.log(name1);
→ABCが出力される
const name2: any = 1;
console.log(name2);
→1が出力される
オブジェクト
オブジェクトの場合、以下のように定義します。
const item: {
id: number,
name: string
} = {
id: 1,
name: "ABC"
}
console.log(item);
→{ id: 1, name: 'ABC' }が出力される
以下のように一部の定義を使用しないとエラーになります。
const item: {
id: number,
name: string
} = {
id: 1
}
console.log(item);
オプションパラメーターのハテナマークをつけておくと、定義しなくてもエラーになりません。
const item: {
id: number,
name?: string
} = {
id: 1
}
console.log(item);
→{ id: 1 }が出力される
オプションパラメーターのハテナマークをつけておくと、undefinedを設定することも可能です。
const item: {
id: number,
name?: string
} = {
id: 1,
name: undefined
}
console.log(item);
→{ id: 1, name: undefined }が出力される
ちなみに、オプションパラメーターをつけないとエラーになります。
const item: {
id: number,
name: string
} = {
id: 1,
name: undefined
}
console.log(item);
→エラーになる
ジェネリクスが使える
ジェネリクスとは「抽象化されたデータ型」を表現する機能
実際に利用される時に、型を確定させるという使い方が可能です。
型だけが違う同じ機能を持つ関数やクラスは、ジェネリクスで1つ用意しておくことで、再利用性ができ、ソースコードの保守性が増します。
let getArray = <T>(value: T): T[] => { // <T>という抽象的な型を宣言 return [value, value, value]; }; console.log(getArray<number>(1)); // 実行時に<T>の部分に型を指定してあげる
Tips
以下、TypeScriptでもJavaScriptでも使えそうなTips
デバッグ
console.logで変数名を記載してあげると、ログ出力時にどの変数のログかが分かるので便利です。
const item: {
id: number,
name?: string
} = {
id: 1,
name: undefined
}
console.log("item", item);
→item { id: 1, name: undefined }と出力される
文字列操作
` を使って文字列を囲むことで、${} を使えます。${} の中には、変数や式などを埋め込めます。
const name1: String = 'taro'
const test: String = `I am ${name1}.`
console.log(test)
→I am taro.と出力される
数値も入れられちゃいます
const name1: Number = 1
const test: String = `I am ${name1}.`
console.log(test)
→I am 1.と出力されます
まとめ
TypeScriptの勉強をDocker環境でやってみました!!