🔰

複数言語で開発する人 の TypeScript 構文復習 ~ AWS CDK を添えて ~

2024/12/15に公開

はじめに

本記事では、AWS 公式のワークショップ 「TypeScript の基礎から始める AWS CDK 開発入門」 の内容をもとに、下記点についてまとめています。

  1. TypeScript の 構文解説 と サンプルコード
  2. AWS CDK での実装例

複数のプログラミング言語を触っていると、基本構文に混乱することがあるかと思います。

TypeScript をメインで使っていない私が AWS CDK を使う際の混乱ポイント(個人的に他のプログラミング言語 との 違いを感じた部分)をサクッと復習できるようにまとめました。

TypeScript の 基本構文

■ TypeScript の 型

  • TypeScript の変数は、let <変数名>: <型> = value; または const <変数名>: <型> = value; という形式で宣言されます。
  • TypeScript のオブジェクトとは、{} で囲まれた、キーと値のペアを 1 つ以上もつデータ構造のことです。
    例){ firstName: "AWS", lastName: "太郎" };
  • オブジェクトのプロパティへのアクセスは、objectName.propertyName または objectName["propertyName"] という形式で可能です。

「変数」の実装例

  1. サンプルコード
let person: { firstName: string; lastName: string; age: number; }; //オブジェクトの型を宣言
person = { firstName: "AWS", lastName: "太郎", age: 30 };//値を代入

// 私の名前は AWS 太郎 です。
console.log(`私の名前は ${person.firstName} ${person.lastName} です。`);
// 30 歳です。
console.log(`${person["age"]} 歳です。`)
  1. AWS CDK
const engine = rds.DatabaseInstanceEngine.mysql({ version: rds.MysqlEngineVersion.VER_8_0_36 });

■ TypeScript の クラス

  • コンストラクタとは、クラスからインスタンスが生成された直後に自動実行される処理をあらかじめ定義できるものです。
  • TypeScript の継承は、class <クラス名> extends <継承したいクラス名>interface <インターフェース名> extends <継承したいインターフェース名> という形式で宣言されます。

「インスタンス化」の実装例

  1. サンプルコード
class Person {
  firstName: string;
  lastName: string;
  // コンストラクタを定義
  constructor(firstName = "AWS", lastName = "太郎") {
    this.firstName = firstName;
    this.lastName = lastName;
  }
  greet() {
    console.log(`私は${this.lastName} ${this.firstName}です。`);
  }
}

// Person クラスを継承した Teacher クラスを定義
class Teacher extends Person {
  // 独自のプロパティとして、Subject を定義
  subject: string;
  constructor(subject: string, firstName = "AWS", lastName = "太郎") {
    // 親クラスのプロパティ( this.xxx )にアクセスする為に super() を実行
    super(firstName, lastName); //親クラスのコンストラクタを呼び出し
    this.subject = subject;
  }
  // greet メソッドを Teacher 独自のものに書き換え = オーバーライド
  greet() {
    console.log(`私は ${this.firstName} ${this.lastName} です。${this.subject} の先生をやっています。`);
  }
}

// subject を Teacher クラスに渡し、オブジェクトを初期化。
const taro = new Teacher("国語");

taro.greet();
  1. AWS CDK

下記では、Vpc クラスをインスタンス化しています。

import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
// ec2 に関するパッケージを import
import * as ec2 from "aws-cdk-lib/aws-ec2";

export class CdkWorkshopStack extends Stack {
  constructor(scope: Construct, id: string, props?: StackProps) {
    super(scope, id, props);

    // vpc を宣言
    const vpc = new ec2.Vpc(this, "BlogVpc", {
      ipAddresses: ec2.IpAddresses.cidr('10.0.0.0/16'),
    });
  }
}
補足
  1. AWS CDK の constructor

    • scope: Construct ツリーの親を指定します。通常は現在のスコープを表す this になります。
    • id: Construct ID と呼ばれ、scope 内で⼀意となる識別⼦を指定します。リソース名や論理 ID 論理 ID の⼀部になります。
    • props: Construct の初期状態を定義するプロパティで、適切なデフォルト値が⽤意されています。たとえば、ec2.Vpc コンストラクトはipAddressesmaxAzssubnetConfiguration のようなプロパティを受け入れます。
  2. モジュールの import/export

    • TypeScriptでは、importexport を使用して型をエクスポートできます。モジュールとは、import または export を1つ以上含むファイルを意味します。
    • import * from '{PATH}'という形式で、まとめてモジュールをインポートできます。
      例)親モジュールから子モジュールを呼び出すサンプルコード
      //child.ts
      export interface Person {
        firstName: string;
        lastName: string;
      }
      
      //parent.ts
      import { Person } from './child';
      
      const person: Person {
        firstName: "AWS";
        lastName: "太郎";
      }
      

■ TypeScript の 修飾子

  • readonly 修飾子によって、意図しないプロパティの書き換えを防ぐことができます。
  • TypeScript のクラスでは、publicprotectedprivate の3種類のアクセス修飾子を使ってクラス外からのプロパティ・メソッドへのアクセスを制御できます。何も指定しない場合は public になります。
  • public などのアクセス修飾子は readonly 修飾子の前につける必要があります。
    例)private readonly firstName: string;

さいごに

AWS CDK の使い方等は、本記事では触れませんでしたが、CDK の使い方についてサクッと復習するための記事も作成しておりますので、宜しければご覧ください🙇‍♀️
https://zenn.dev/azunyan/articles/b3eb1fb2a9cc72

以上、どなたかの参考になれば幸いです。
えみり〜でした|ωΦ)ฅ

参考

Discussion