【初心者エンジニアメモ】TypeScriptで出来る事10選

プログラミング

こんにちは、初心者エンジニアのあなた。JavaScriptを勉強していると、TypeScriptという言葉を聞いたことがありませんか?TypeScriptはJavaScriptのスーパーセットと呼ばれる言語で、JavaScriptに型やクラスなどの機能を追加したものです。TypeScriptはJavaScriptと互換性があり、コンパイルするとJavaScriptに変換されます。では、TypeScriptを使うと何ができるのでしょうか?今回は、TypeScriptで出来る事10選を紹介します。

1. 型安全なコーディングができる

TypeScriptの最大の特徴は、型システムを持っていることです。型システムとは、変数や関数の引数や戻り値などに型を指定する仕組みのことです。型を指定することで、コンパイル時に型の不一致や未定義のプロパティへのアクセスなどのエラーを検出できます。これにより、実行時に発生するバグを減らすことができます。例えば、以下のコードはJavaScriptではエラーになりませんが、TypeScriptではコンパイルエラーになります。

// JavaScript
function add(a, b) {
  return a + b;
}

console.log(add(1, "2")); // 12
// TypeScript
function add(a: number, b: number): number {
  return a + b;
}

console.log(add(1, "2")); // コンパイルエラー:引数'b'の型が'number'ではありません。

2. クラスベースのオブジェクト指向プログラミングができる

JavaScriptはプロトタイプベースのオブジェクト指向言語ですが、TypeScriptはクラスベースのオブジェクト指向言語です。クラスベースとは、オブジェクトの設計図となるクラスを定義し、そのクラスからインスタンスを生成するという方法です。クラスにはコンストラクタやメソッド、プロパティなどを定義できます。また、継承や抽象クラス、インターフェースなどの機能も使えます。これらの機能を使うことで、コードの再利用性や拡張性を高めることができます。例えば、以下のコードはTypeScriptで動物クラスと犬クラスを定義し、犬クラスからインスタンスを生成してメソッドを呼び出すものです。

// TypeScript
class Animal {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  move(distance: number) {
    console.log(`${this.name} moved ${distance} meters.`);
  }
}

class Dog extends Animal {
  bark() {
    console.log("Woof! Woof!");
  }
}

const dog = new Dog("Pochi");
dog.bark(); // Woof! Woof!
dog.move(10); // Pochi moved 10 meters.

3. ジェネリックスや高階型などの高度な型システムが使える

TypeScriptは単純な型だけでなく、ジェネリックスや高階型などの高度な型システムも持っています。ジェネリックスとは、型をパラメータ化して汎用的な関数やクラスを定義する仕組みです。例えば、以下のコードはジェネリックスを使って配列の最初の要素を返す関数を定義しています。この関数は、配列の型に関係なく動作します。

// TypeScript
function first<T>(array: T[]): T {
  return array[0];
}

console.log(first([1, 2, 3])); // 1
console.log(first(["a", "b", "c"])); // a
console.log(first([{ name: "Alice" }, { name: "Bob" }])); // { name: "Alice" }

高階型とは、型を操作する型のことです。例えば、以下のコードは高階型を使って関数の引数や戻り値の型を変換する型を定義しています。この型は、関数を受け取って別の関数を返す関数に使えます。

// TypeScript
type Transform<F, A, B> = F extends (arg: infer T) => infer R
  ? (arg: T & A) => R & B
  : never;

function addName(name: string) {
  return (obj: object) => ({ ...obj, name });
}

const addAge = (age: number) => (obj: object) => ({ ...obj, age });

const addNameAndAge = <T extends object>(name: string, age: number) => (
  obj: T
): Transform<typeof addName, T, { age: number }> =>
  addAge(age)(addName(name)(obj));

const person = addNameAndAge("Alice", 20)({}); // { name: "Alice", age: 20 }

4. デコレータやアサーションなどの実験的な機能が使える

TypeScriptはJavaScriptの標準化プロセスにおける提案段階の機能も実験的にサポートしています。例えば、デコレータやアサーションなどの機能があります。デコレータとは、クラスやメソッド、プロパティなどに付与できる特殊な関数で、その振る舞いを変更したり、メタデータを追加したりすることができます。例えば、以下のコードはデコレータを使ってクラスにログ出力の機能を追加しています。

// TypeScript
function log(target: Function) {
  console.log(`Class ${target.name} is created.`);
}

@log
class Person {
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

const person = new Person("Alice"); // Class Person is created.

アサーションとは、値が特定の型であることを明示的に宣言する構文です。アサーションはコンパイラに型チェックをスキップさせたり、より正確な型推論をさせたりすることができます。例えば、以下のコードはアサーションを使って変数に型を指定しています。

// TypeScript
let x = "hello" as string; // xはstring型として扱われる
let y = <number>x; // yはnumber型として扱われる(コンパイルエラーは発生しないが、実行時にエラーになる)
let z = x as unknown as number; // zもnumber型として扱われる(unknown型を経由することで、より明示的にアサーションすることができる)

5. JavaScriptと互換性がある

TypeScriptはJavaScriptのスーパーセットであるため、JavaScriptと互換性があります。つまり、JavaScriptのコードはそのままTypeScriptとして動作します。また、TypeScriptからJavaScriptへのコンパイルも簡単に行えます。TypeScriptでは、コンパイル時に対象となるJavaScriptのバージョンを指定できます。例えば、以下のコマンドはTypeScriptのコードをES5のJavaScriptにコンパイルします。

tsc --target ES5 app.ts

TypeScriptはJavaScriptと互換性があるので、既存のJavaScriptのライブラリやフレームワークとも組み合わせて使うことができます。ただし、TypeScriptは型システムを持っているので、JavaScriptのライブラリやフレームワークを使うには型定義ファイルが必要です。型定義ファイルとは、JavaScriptのコードに対して型を付けたファイルのことで、拡張子は.d.tsです。型定義ファイルは自分で作成することもできますが、多くの場合は[DefinitelyTyped]というプロジェクトで提供されています。例えば、以下のコマンドはReactというJavaScriptのライブラリに対応する型定義ファイルをインストールします。

npm install --save-dev @types/react

6. モジュールや名前空間などのモジュールシステムが使える

TypeScriptはJavaScriptのモジュールシステムに対応しています。モジュールシステムとは、コードを複数のファイルに分割し、必要な部分だけをインポートしたり、他のファイルにエクスポートしたりする仕組みです。モジュールシステムを使うことで、コードの構造化や管理が容易になります。TypeScriptでは、ES6のモジュールやCommonJSのモジュールなど、複数のモジュール形式に対応しています。例えば、以下のコードはES6のモジュールを使って関数やクラスをインポートしたりエクスポートしたりするものです。

// TypeScript
// util.ts
export function add(a: number, b: number): number {
  return a + b;
}

export function subtract(a: number, b: number): number {
  return a - b;
}

// app.ts
import { add, subtract } from "./util";

console.log(add(1, 2)); // 3
console.log(subtract(3, 1)); // 2

// person.ts
export class Person {
  name: string;

  constructor(name: string) {
    this.name = name;
  }

  greet() {
    console.log(`Hello, I'm ${this.name}.`);
  }
}

// main.ts
import { Person } from "./person";

const person = new Person("Alice");
person.greet(); // Hello, I'm Alice.

また、TypeScriptでは名前空間という機能も使えます。名前空間とは、グローバルなスコープを汚染しないように、コードを特定の名前で囲む仕組みです。名前空間を使うことで、同じ名前の変数や関数などが衝突することを防ぐことができます。例えば、以下のコードは名前空間を使ってMathという名前で関数や定数を定義しています。

// TypeScript
namespace Math {
  export function add(a: number, b: number): number {
    return a + b;
  }

  export function subtract(a: number, b: number): number {
    return a - b;
  }

  export const PI = 3.14;
}

console.log(Math.add(1, 2)); // 3
console.log(Math.subtract(3, 1)); // 2
console.log(Math.PI); // 3.14

7. JSXやTSXなどの特殊な構文が使える

TypeScriptはJavaScriptに加えて、JSXやTSXなどの特殊な構文もサポートしています。JSXとは、JavaScriptの中にHTMLのようなタグを書くことができる構文です。JSXはReactというJavaScriptのライブラリで使われており、UIのコンポーネントを宣言的に記述することができます。例えば、以下のコードはJSXを使ってボタンのコンポーネントを定義しています。

// JSX
import React from "react";

function Button(props) {
  return <button onClick={props.onClick}>{props.children}</button>;
}

export default Button;

TSXとは、TypeScriptの中にJSXを書くことができる構文です。TSXはJSXと同じようにReactのコンポーネントを記述できますが、型チェックや補完などの恩恵も受けられます。例えば、以下のコードはTSXを使ってボタンのコンポーネントを定義しています。

// TSX
import React from "react";

type ButtonProps = {
  onClick: () => void;
  children: React.ReactNode;
};

function Button(props: ButtonProps) {
  return <button onClick={props.onClick}>{props.children}</button>;
}

export default Button;

8. ツールやエディタとの親和性が高い

TypeScriptはツールやエディタとの親和性が高い言語です。TypeScriptは型システムを持っているので、コードの解析や補完などの機能が充実しています。例えば、Visual Studio CodeやWebStormなどのエディタでは、TypeScriptのコードに対して以下のような機能を提供しています。

  • シンタックスハイライト:コードの構造や意味に応じて色分けされる。
  • コード補完:入力中に候補や説明が表示される。
  • エラーチェック:コンパイルエラーやスペルミスなどが赤線で表示される。
  • リファクタリング:変数名の変更や関数の抽出などが簡単に行える。
  • ドキュメンテーション:関数やクラスなどの定義や使用法が表示される。

また、TypeScriptはJavaScriptと互換性があるので、JavaScript用のツールやライブラリも使うことができます。例えば、以下のツールやライブラリはTypeScriptと組み合わせて使うことができます。

  • Babel:JavaScriptのトランスパイラで、最新の構文や機能を古いブラウザでも動作するように変換する。
  • Webpack:JavaScriptのモジュールバンドラで、複数のファイルを一つにまとめたり、画像やCSSなどのリソースも管理する。
  • ESLint:JavaScriptの静的解析ツールで、コードの品質やスタイルをチェックしたり、自動修正したりする。
  • Jest:JavaScriptのテストフレームワークで、単体テストや統合テストなどを行う。

9. 多くのプロジェクトや企業で採用されている

TypeScriptは多くのプロジェクトや企業で採用されている言語です。TypeScriptは2012年にMicrosoftによって開発されましたが、その後オープンソース化されて多くのコミュニティや開発者から支持されました。現在では、GitHubやStack OverflowなどのサイトでTypeScriptの人気や活発さが高まっています。例えば、以下のサイトではTypeScriptに関する情報を見ることができます。

  • [GitHub]:TypeScriptはGitHubで最もスターを獲得した言語の一つであり、多くのプロジェクトで使われています。例えば、[Angular]や[Vue]などの人気のフロントエンドフレームワークや、[Deno]や[Nest]などのバックエンドフレームワークなどがTypeScriptで開発されています。
  • [Stack Overflow]:TypeScriptはStack Overflowで最も質問された言語の一つであり、多くの開発者がTypeScriptに関心を持っています。例えば、[2023 Developer Survey]では、TypeScriptは最も愛されている言語の第4位にランクされています。
  • [State of JS]:TypeScriptはJavaScriptのエコシステムで最も注目されている言語の一つであり、多くの開発者がTypeScriptを使っています。例えば、[2022 State of JS]では、TypeScriptは最も満足度が高い言語の第2位にランクされています。

また、TypeScriptは多くの企業で採用されている言語です。例えば、以下の企業ではTypeScriptを使って開発を行っています。

  • [Microsoft]:TypeScriptはMicrosoftによって開発された言語であり、Microsoft自身も多くのプロダクトでTypeScriptを使っています。例えば、[Visual Studio Code]や[Skype]などがTypeScriptで開発されています。
  • [Google]:GoogleはAngularというフロントエンドフレームワークを開発しており、その公式言語としてTypeScriptを推奨しています。また、Google自身も多くのプロダクトでTypeScriptを使っています。例えば、[Google Cloud Platform]や[Gmail]などがTypeScriptで開発されています。
  • [Airbnb]:Airbnbはオンライン旅行予約サービスを提供しており、そのウェブサイトやアプリでTypeScriptを使っています。AirbnbはTypeScriptの型安全性や生産性などのメリットを享受しており、その経験やベストプラクティスを公開しています。

以上のように、TypeScriptは多くのプロジェクトや企業で採用されている言語です。これは、TypeScriptがJavaScriptに対して優れた機能や利点を提供していることの証明です。もしあなたがJavaScriptを勉強しているなら、ぜひTypeScriptも学んでみてください。あなたのコーディングスキルやキャリアに役立つこと間違いなしです。

10. まとめ

この記事では、TypeScriptで出来る事10選を紹介しました。TypeScriptはJavaScriptに型やクラスなどの機能を追加した言語であり、以下のようなことができます。

  • 型安全なコーディングができる
  • クラスベースのオブジェクト指向プログラミングができる
  • ジェネリックスや高階型などの高度な型システムが使える
  • デコレータやアサーションなどの実験的な機能が使える
  • JavaScriptと互換性がある
  • モジュールや名前空間などのモジュールシステムが使える
  • JSXやTSXなどの特殊な構文が使える
  • ツールやエディタとの親和性が高い
  • 多くのプロジェクトや企業で採用されている

TypeScriptはJavaScriptのスーパーセットであるため、JavaScriptの知識があれば簡単に学ぶことができます。TypeScriptはJavaScriptに対して多くのメリットを提供しており、コードの品質や生産性を向上させることができます。もしあなたがJavaScriptを勉強しているなら、ぜひTypeScriptも学んでみてください。あなたのコーディングスキルやキャリアに役立つこと間違いなしです。

コメント

タイトルとURLをコピーしました