TypeScript 基本構造

TypeScript プログラムの基本構造はいくつかの部分に分けることができ、各部分には特定の役割があります。

以下は TypeScript プログラムの一般的な構成要素です:

  • 宣言部分:型宣言やインターフェース宣言などを含みます。
  • 変数宣言:含みますlet, constとvarの使用。
  • 関数宣言:通常の関数とアロー関数を含みます。
  • クラス宣言:クラスとそのメンバーを定義するために使用します。
  • インターフェースと型エイリアス:型の構造を記述します。
  • モジュール化:を使ってimportとexportコードを整理します。
  • 型アサーション:型を強制的に変換します。
  • ジェネリック:コードの再利用性を高めます。
  • コメント:コードの可読性を高めます。
  • 型推論:型を自動的に推論します。
  • 型ガード:型の範囲を絞り込みます。
  • 非同期プログラミング:をサポートしますasync/await。
  • エラーハンドリング:によってtry/catchエラーを捕捉します。

以上の各部分が一体となって TypeScript プログラムの基本構造を構成し、開発者に強力な型チェック、コード構造、保守性を提供します。


1. 宣言部分(Declarations)

型宣言:TypeScript は静的型付け言語であり、型宣言を使用して変数、関数、クラスなどの型を定義できます。型宣言はコードの保守性と可読性を高めるのに役立ちます。

例

let name: string = "Alice";
let age: number = 30;

インターフェース宣言:オブジェクトの構造を定義するために使用し、オブジェクトのプロパティとメソッドを含みます。

例

interface Person {
    name: string;
    age: number;
}

2. 変数宣言(Variable Declarations)

TypeScript では、let、const、var を使用して変数を宣言できます。let と const の使用が推奨され、var の使用は推奨されません。

例

let age: number = 25;
const pi: number = 3.14;

3. 関数宣言(Function Declarations)

関数宣言:TypeScript では、型注釈付きの関数を宣言できます。これにはパラメータの型と戻り値の型が含まれます。

例

function greet(name: string): string {
    return "Hello, " + name;
}

アロー関数:TypeScript は ES6 のアロー関数もサポートしており、簡潔な構文で関数を宣言できます。

例

const greet = (name: string): string => "Hello, " + name;

4. クラス宣言(Class Declarations)

TypeScript はオブジェクト指向プログラミングをサポートしており、クラスとそのメソッド、プロパティを定義できます。

例

class Person {
    name: string;
    age: number;
   
    constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
    }
   
    greet() {
    return `Hello, my name is ${this.name}`;
    }
}

5. インターフェースと型エイリアス(Interfaces & Type Aliases)

インターフェース(Interface):オブジェクトの形状を記述するために使用します。インターフェースは継承および拡張できます。

例

interface Animal {
    name: string;
    sound: string;
    makeSound(): void;
}

型エイリアス(Type Alias):オブジェクト型、ユニオン型、交差型などに別名を定義できます。

例

type ID = string | number;

6. モジュールとインポート/エクスポート(Modules & Imports/Exports)

TypeScript はモジュールプログラミングをサポートしており、import と export を使用してコードを整理できます。

エクスポート:

例

export class Person {
    constructor(public name: string) {}
}

インポート:

例

import { Person } from './person';

7. 型アサーション(Type Assertions)

場合によっては、TypeScript が変数の正確な型を推論できないことがあります。そのような場合、開発者は型アサーションを使用して型を強制的に指定できます。

例

let value: any = "hello";
let strLength: number = (value as string).length;

8. ジェネリック(Generics)

ジェネリックは、関数、インターフェース、クラスを定義する際に具体的な型を指定せず、プレースホルダーを使用し、ユーザーが使用時に具体的な型を渡せるようにします。ジェネリックはコードの再利用性と型安全性を高めることができます。

例

function identity<T>(arg: T): T {
    return arg;
}

9. コメント(Comments)

コメントは TypeScript プログラムでコードの役割や考え方などを説明し、コードの可読性を高めるために使用します。

単行コメント:

例

// これは単行コメントです

複数行コメント:

例

/* これは
複数行コメントです */


10. 型推論(Type Inference)

TypeScript は状況に応じて変数の型を自動的に推論します。例えば、変数を宣言して値を代入すると、TypeScript はその変数の型を推論します。

例

let num = 10;  // TypeScript は num を number 型と推論します

11. 型ガード(Type Guards)

TypeScript は、typeof や instanceof などの型ガードを提供し、実行時に変数の型の範囲を絞り込むために使用します。

例

function isString(value: any): value is string {
    return typeof value === 'string';
}

12. 非同期プログラミング(Asynchronous Programming)

TypeScript は非同期プログラミングを完全にサポートしており、async/await 構文を使用して非同期操作を処理できます。

例

async function fetchData(): Promise<string> {
    const response = await fetch("https://example.com");
    const data = await response.text();
    return data;
}

13. エラーハンドリング(Error Handling)

TypeScript では、try/catch ブロックを使用してエラーハンドリングを行うことができ、型を使用してエラーの型を記述することもできます。

例

try {
    throw new Error("Something went wrong");
} catch (error) {
    if (error instanceof Error) {
        console.error(error.message);
    }
}
その他の拡張