TypeScript を使うと何が良いのですか。弱点はありますか

書いている時点で間違いに気づける、読む人と道具に意図が伝わる、という良さと、型は実行のときに消えるので外から来たデータは別に検査が要る、という弱点を合わせて答える問い。

答えてみる

面接官に「TypeScript を使うと何が良いのですか。弱点はありますか」と聞かれたつもりで、答えを見る前に自分の言葉で答えます。

声に出して答えた人は「書かずに答えを見る」で開けます。

解説を読む

聞かれ方から関連するコースまで、この問いの解説を全部ここに置いています。

こう聞かれます

  • 「TypeScript を使うと何が良いのですか」
  • 「TypeScript の弱点や、気をつけている所はありますか」
  • 「型を付けていたのに、本番で型と違うデータが来て落ちたことはありますか」(仕組みの理解を、裏から聞く形)

面接官が見ている点

  • 「バグが減る」だけで終わらず、いつ (書いているとき)、何が (型の食い違い) 見つかるのかを話せるか
  • 型は JavaScript に直すときに消える、だから API の応答やフォームの入力は別に確かめる、と分かっているか
  • any で逃げることの危うさと、手間との釣り合いを話せるか

短い答え

  • TypeScript は JavaScript に型を足した言語で、動かす前、書いている時点で「数を渡すはずの所に文字列を渡した」のような間違いに気づけます。
  • 型が説明書の役目もするので、エディターの補完や名前の付け替えが正確になり、人数が増えても安心して直せます。
  • 弱点は、型は JavaScript に直すときに全部消えるので、API の応答のように外から来たデータが型どおりかは保証されないことです。そこは別に検査を書きます。

少し詳しい答え

書いている時点で気づける

次の関数は、合計の金額を数で返すつもりで書いています。

TypeScript

type Item = { name: string; price: number };

function total(items: Item[]): number {
  return items.reduce((sum, item) => sum + item.price, 0);
}

total([{ name: "ペン", price: "120" }]);
// 型の検査で、price に文字列を渡した所がエラーになる

JavaScript のままだと、これは動いてしまい、"0120" のような文字列が返って、画面に出るまで気づけません。TypeScript なら、保存した時点でエディターが赤い線で教えてくれます。

全部に型を書く必要もありません。const count = 3 のように、値から型を読み取ってくれる仕組み (型推論) があるので、主に関数の引数と戻り値、データの形に書きます。

型は実行のときに消える

TypeScript の型の注釈は、JavaScript に直すときに全部消え、動きを変えません。ブラウザやサーバーで動いているのは型の無い JavaScript です。

だから、API の応答やフォームの入力のように外から来たデータが型どおりかは、動いているときには確かめられません。as User と書いても、中身を確かめたことにはならず、「そうだと信じる」と宣言しただけです。

TypeScript

import { z } from "zod";

const User = z.object({ id: z.number(), name: z.string() });

const res = await fetch("/api/me");
const user = User.parse(await res.json());
// 形が違えば、ここでエラーとして止まる

外から来た物は、このように検査の道具 (zod など) で形を確かめてから中へ入れます。中に入ったあとは型を信じてよい、という境目を作るのがコツです。

弱点と、使わない選択

  • 手間が増える型を書く、型のエラーを直す、JavaScript に直す手順を用意する、などの手間がかかります
  • any で穴が開く型が分からない所を any にすると、そこから先は検査が効きません。分からない物は unknown で受けて、確かめてから使います
  • 型が複雑になりすぎる凝った型は読む人を困らせます。読める型にとどめます

数十行の使い捨ての作業用のスクリプトや、すぐ捨てる試作なら、JavaScript のままのほうが早いこともあります。逆に、何人もで長く直し続けるコードや、API の形を前と後ろで共有したい所では、手間を払う価値が大きくなります。

自分が関わったコードで、型のおかげで先に気づけた間違いを 1 つ用意して話すと伝わります。たとえば「API の欄の名前を変えたとき、使っている場所が全部エラーになり、直し漏れが無かった」のような形です。

よくある間違い

  • 「TypeScript なら実行のときも型が守られる」と思う型は消えるので、外から来たデータは別に検査します
  • 困ったら any や as で黙らせる エラーは消えても、間違いは残ったままです。unknown で受けて確かめるほうが安全です
  • 良い点だけを話す手間や、合わない場面も言えると、道具として選べる人だと伝わります

深掘りの問い

  • 「any と unknown は何が違いますか」 any は何でも通して検査を止め、unknown は確かめるまで使わせない、と答えます
  • 「API の応答に型を付けるとき、どうしていますか」 型を書くだけでなく、検査の道具で形を確かめてから使う、と答えます
  • 「JavaScript のプロジェクトを TypeScript に移すなら、どう進めますか」 一度に全部ではなく、データの形や共通の関数から少しずつ移し、最初はゆるい設定から厳しくしていく、と答えます

確認日 2026年10月24日

技術面接問題の一覧へ戻る