1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScript入門: 自己成長の鍵になる3つの考え方と実践例

1
Posted at

初めに、僕がWebエンジニアとしてのキャリアをスタートした頃の話から始めよう。まだ、TypeScriptという言語に興味があったのは、JavaScriptの不足を補うためだと認識していた。JavaScriptは、動的な言語で、開発の柔軟性は高いものの、型の安全が確保できないという弱点があった。一方、TypeScriptは、JavaScriptに拡張された静的型付け言語であり、型を明示することで、コードの品質向上や、バグの早期発見を実現できると捉えていた。

しかし、実際にTypeScriptを学び始めた後、その価値観が大きく変わった。TypeScriptは、単にJavaScriptのコード品質を向上させるだけでなく、開発のスムーズさと、長期的な可維持性を高めるツールであると認識した。この記事では、TypeScript入門の過程で学んだ、初心者向けの3つの考え方と実践例を共有したい。

1. 型を明確に定義する重要性

TypeScriptの核心は、型を明確に定義することにある。型は、変数や関数の入出力、クラスやインターフェースの構造を定義し、コードの理解を助け、バグを早期に発見するためのツールとして機能する。

例えば、ある関数が数値を引数として受け取り、その2倍の値を返すとしよう。JavaScriptでは、引数が数値でない場合、そのまま実行すると、NaNが返されるかもしれない。しかし、TypeScriptでは、関数の引数に型を明示することで、このような問題を防ぐことができる。

function multiplyByTwo(num: number): number {
  return num * 2;
}

const result = multiplyByTwo(5); // 正常に実行される
const wrongResult = multiplyByTwo("hello"); // コンパイル時にエラーを引き起こす

この例でわかるように、TypeScriptは、引数や戻り値の型を定義することで、コードの品質を向上させ、バグを早期発見に繋げる効果がある。特に、大規模なコードベースを扱う場合や、チームで協力開発する場合、このような明確な型定義は、コードの理解を助け、バグの発生を防ぐために不可欠である。

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

スイカゲームとにゃんこ大戦争のようなタワーディフェンス系ゲームを組み合わせたゲームを作成しました!
遊んでみていただけると嬉しいです🙇‍♂️


海外テックニュースを追いたいけど、英語や情報量の多さで大変…という方向けに、
Hacker News の話題を日本語でサクッと追える「HackerNews 日本語まとめ & AI要約」
を個人開発しました!
技術トレンド収集に使ってもらえると嬉しいです🔥🙇‍♂️
→ HackerNews 日本語まとめ & AI要約: https://hn-matome-2ht.pages.dev/


「ニャンパイアサバイバー」というヴァンパイアサバイバーリスペクトのゲームを作成しました!
もしよろしければ遊んで頂けると嬉しいです😭


習い事教室の先生向けに、SNS 投稿・生徒募集・保護者通知の文章を AI で生成する Web サービス「おしらせAI」を個人開発しました。Next.js + Supabase + LLM で構成しており、無料で月 10 回まで試用できます。よければ触ってみてください。

→ おしらせAI: https://oshirase-ai.vercel.app/

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

2. インターフェースとジェネリクスの活用

TypeScriptの特徴のもう一つは、インターフェースとジェネリクスの活用だ。インターフェースは、オブジェクトの形状を定義し、異なるクラス間で共通の振る舞いを実現するのに使われる。ジェネリクスは、型をパラメータとして受け取って、型を動的に変えることができる。

例えば、異なるデータタイプを扱う共通の処理を実行したい場合、インターフェースを活用することで、その処理を実装するクラスを定義し、共通の処理を実行できるようにすることができる。

interface Shape {
  color: string;
  calculateArea(): number;
}

class Circle implements Shape {
  radius: number;
  constructor(radius: number) {
    this.radius = radius;
  }
  calculateArea(): number {
    return Math.PI * this.radius * this.radius;
  }
}

class Rectangle implements Shape {
  width: number;
  height: number;
  constructor(width: number, height: number) {
    this.width = width;
    this.height = height;
  }
  calculateArea(): number {
    return this.width * this.height;
  }
}

このように、インターフェースとジェネリクスを活用することで、TypeScriptは、異なるデータタイプを扱うコードをスムーズに実行できるようにし、コードの可維持性を高める効果がある。

3. TypeScriptとリアルな開発環境の連携

TypeScriptは、単なるコードの記述方法だけではなく、開発環境との連携においても、その価値を発揮する。例えば、Visual Studio Codeのような開発環境では、TypeScriptのサポートが充実しており、自動コンプリートやエラー検知、コードの自動整形などが簡単に実行できる。

さらに、TypeScriptと他の言語やツールとの連携においても、その強みが発揮される。例えば、AngularやNext.jsなどのフレームワークは、TypeScriptと深く連携しており、そのフレームワークを使用する際に、TypeScriptの強みを最大限に発揮させることができる。

また、TypeScriptは、単にJavaScriptの品質を向上させるだけでなく、開発のスムーズさと、長期的な可維持性を高めるツールである。大規模なコードベースを扱う場合や、チームで協力開発する場合、このような明確な型定義や、インターフェース、ジェネリクスの活用は、コードの理解を助け、バグの発生を防ぐために不可欠である。

まとめ

TypeScriptは、JavaScriptに拡張された静的型付け言語であり、型を明確に定義することで、コードの品質を向上させ、バグを早期に発見することができる。また、インターフェースとジェネリクスの活用により、異なるデータタイプを扱うコードをスムーズに実行できるようになり、開発のスムーズさと、長期的な可維持性を高める。さらに、開発環境との連携においても、その強みが発揮される。これらの特徴により、TypeScriptは、Webエンジニアにとって、非常に重要なツールである。これからは、TypeScriptを活用して、より品質の高いコードを書き、開発のスムーズさと、長期的な可維持性を高めていきたい。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?