TypeScript / LESSON 01 / TS01

TypeScript:TypeScriptとは・実行環境

1学習の目的

2基礎解説

TypeScriptはJavaScriptに「型」を足した言語です。文法はほぼ同じで、JavaScriptのコードはそのままTypeScriptとして動きます。違うのは、変数や関数に「この値は数値」「ここには文字列」と宣言できる点です。

JavaScriptTypeScript
間違いに気づく時実行したとき書いたとき
const n: number = "文字"そのまま動くエラーになる
実行方法そのまま実行JSに変換してから実行
向いている場面小さなスクリプト複数人・長期の開発
✅ 実行環境の用意
  1. 最も手軽なのはブラウザで動くPlayground。「TypeScript Playground」で検索すると公式のオンライン環境が見つかる。インストール不要で、型エラーもその場で赤線で表示される。この教材はすべてそこで試せる。
  2. 自分のPCで動かすなら、Node.js を入れてから npm install -g typescript tsx でインストールする。npx tsx ファイル名.ts で直接実行できる。
  3. 拡張子は .ts。JavaScriptの .js と区別される。
  4. 型注釈は 変数名: 型 の形で書くconst price: number = 1000; のように、名前のあとにコロンで型を指定する。
  5. TypeScriptはそのままでは動かない。実行前にJavaScriptへ変換(コンパイル)される。tsx はこの変換と実行をまとめてやってくれる道具。

現場使用例:Reactアプリ、業務システムのフロントエンド、Node.jsのサーバー開発。複数人で長く保守するコードでは、TypeScriptが事実上の標準になっている。

// 基本の型注釈:変数名のあとに : 型 を書く
const price: number = 128000;
const name: string = "ノートPC";
const inStock: boolean = true;

console.log(name, price, inStock);

// ❌ 型が違うとエラーになる(実行する前に分かる)
const wrong: number = "文字列";
// → Type 'string' is not assignable to type 'number'.

// JavaScriptのコードはそのまま動く
const items = ["A", "B", "C"];
console.log(items.length);

// 計算も同じ
const taxed: number = Math.round(price * 1.1);
console.log(`税込${taxed.toLocaleString()}円`);

3基本ドリル(10問)

TS01-D01 数値型の変数 price に 1000 を代入し、型注釈を付けて出力せよ。 コーディング★☆☆無料
期待される結果

出力 == 1000

ヒント

const price: number = 1000; と書く。変数名のあとにコロンと型。

模範解答
const price: number = 1000;
console.log(price);
解説

これがTypeScriptの基本形: number の部分が型注釈で、JavaScriptには無い記法。

TS01-D02 const n: number = "文字列"; と書くと、どの段階で問題が分かるか。
A. 実行したとき B. 書いた時点(実行前) C. 分からない D. 問題ない
選択★☆☆無料
期待される結果

解答 == B

ヒント

TypeScriptの最大の利点は何か。

模範解答
B
解説

実行する前にエディタが赤線で教えてくれる。JavaScriptなら実行して初めておかしいと気づくが、TypeScriptは書いた瞬間に分かる。

TS01-D03 文字列型の変数 productName に「ノートPC」を、真偽値型の inStock に true を代入し、両方を1行で出力せよ。 コーディング★☆☆無料
期待される結果

出力 == ノートPC true

ヒント

string と boolean を使う。console.log(name, inStock) で並べて出力できる。

模範解答
const productName: string = "ノートPC";
const inStock: boolean = true;

console.log(productName, inStock);
解説

基本の3つの型は number・string・boolean。JavaScriptのデータ型(JS02)に、そのまま名前を付けたもの。

TS01-D04 数値型を指定するコードを完成させよ。 穴埋め★☆☆無料
コード
const stock: ____ = 42;

console.log(stock);
期待される結果

出力 == 42

ヒント

数値を表す型の名前。小文字で6文字。

模範解答
number
解説

型名はすべて小文字Number(大文字始まり)とは別物なので注意する。

TS01-D05 TypeScriptのファイルの拡張子はどれか。
A. .js B. .ts C. .tsx D. .type
選択★☆☆無料
期待される結果

解答 == B

ヒント

TypeScriptの略。

模範解答
B
解説

.tsx はReactのJSXを含む場合に使う。通常のTypeScriptは .ts
⚠ 変数名の注意:ブラウザ向けの設定では namestatus がブラウザ標準の変数と衝突し、Cannot redeclare block-scoped variable というエラーになることがある。productName のように具体的な名前を付けると安全。

TS01-D06 単価 128000 と数量 3 を型注釈付きで宣言し、小計(単価×数量)を計算して「小計:384,000円」の形式で出力せよ。 コーディング★★☆無料
期待される結果

出力 == 小計:384,000円

ヒント

3桁区切りは toLocaleString()。テンプレートリテラル(JS02)が使える。

模範解答
const price: number = 128000;
const qty: number = 3;
const subtotal: number = price * qty;

console.log(`小計:${subtotal.toLocaleString()}円`);
解説

JavaScriptの書き方はそのまま使える。テンプレートリテラルもtoLocaleStringも同じ。違うのは型注釈が付いていることだけ。

TS01-D07 真偽値型を指定するコードを完成させよ。 穴埋め★★☆無料
コード
const isMember: ____ = true;

console.log(isMember ? "会員" : "非会員");
期待される結果

出力 == 会員

ヒント

true / false を表す型。小文字で7文字。

模範解答
boolean
解説

三項演算子もJavaScriptと同じ(JS04)。TypeScriptは文法を増やすのではなく、型の情報を足しているだけ。

TS01-D08 既存のJavaScriptのコードを .ts ファイルに貼り付けると、どうなるか。
A. 必ずエラーになる B. 基本的にそのまま動く C. 全部書き直しが必要 D. 実行できない
選択★★☆無料
期待される結果

解答 == B

ヒント

TypeScriptはJavaScriptに何を「足した」ものか。

模範解答
B
解説

TypeScriptはJavaScriptの上位互換。だから既存のコードを少しずつ型付けしていく、という移行の仕方ができる。いきなり全部書き直す必要はない。

TS01-D09 商品名・価格・在庫の3つを型注釈付きで宣言し、「ノートPC:128,000円(在庫5個)」の形式で出力せよ(価格128000、在庫5)。 コーディング★★☆無料
期待される結果

出力 == ノートPC:128,000円(在庫5個)

ヒント

string と number を組み合わせる。テンプレートリテラルで文字列を組み立てる。

模範解答
const productName: string = "ノートPC";
const price: number = 128000;
const stock: number = 5;

console.log(`${productName}:${price.toLocaleString()}円(在庫${stock}個)`);
解説

複数の型を使い分けるのがTypeScriptの日常。名前は文字列、価格と在庫は数値——この区別がコードに書かれていること自体が、後から読む人への説明になる。

TS01-D10 税抜価格 45000 を型注釈付きで宣言し、税込価格(10%、四捨五入して整数)を計算して「税込49,500円」と出力せよ。 コーディング★★☆無料
期待される結果

出力 == 税込49,500円

ヒント

Math.round で四捨五入する。計算結果にも型注釈を付けられる。

模範解答
const price: number = 45000;
const taxed: number = Math.round(price * 1.1);

console.log(`税込${taxed.toLocaleString()}円`);
解説

計算結果の変数にも型を書ける。書かなくても推論されるが(TS05で扱う)、明示すると「ここは数値であるべき」という意図が伝わる。

4実践シナリオ(5問)

TS01-S01 【商品カードの表示】商品名「ワイヤレスマウス」・価格3200円・在庫42個・セール対象かどうか(true)を型注釈付きで宣言し、次の2行を出力せよ。
1行目:「ワイヤレスマウス:3,200円」
2行目:「在庫42個/セール対象」
コーディング★★☆無料
期待される結果

出力2行が完全一致

ヒント

4つの変数に適切な型を付ける。2行目はセール対象かどうかで表示を変える(三項演算子)。

模範解答
const productName: string = "ワイヤレスマウス";
const price: number = 3200;
const stock: number = 42;
const onSale: boolean = true;

console.log(`${productName}:${price.toLocaleString()}円`);
console.log(`在庫${stock}個/${onSale ? "セール対象" : "通常価格"}`);
解説

3種類の型を1つの処理の中で使い分けている。実務のデータはこのように型が混在するので、それぞれに正しい型を付ける習慣が重要になる。

TS01-S02 【送料の計算】商品価格 4800円を型注釈付きで宣言し、5000円未満なら送料600円、以上なら無料として、「商品4,800円+送料600円=合計5,400円」の形式で出力せよ。 コーディング★★☆無料
期待される結果

出力 == 商品4,800円+送料600円=合計5,400円

ヒント

送料は三項演算子で決める。合計も型注釈付きの変数にする。

模範解答
const price: number = 4800;
const shipping: number = price >= 5000 ? 0 : 600;
const total: number = price + shipping;

console.log(`商品${price.toLocaleString()}円+送料${shipping}円=合計${total.toLocaleString()}円`);
解説

条件によって決まる値にも型を付けられるshipping は0か600のどちらかだが、どちらも数値なので number でよい。

TS01-S03 【会員割引】価格 20000円、会員かどうか(true)を型注釈付きで宣言し、会員なら10%引きの価格を計算して「会員価格:18,000円(2,000円お得)」と出力せよ。 コーディング★★☆無料
期待される結果

出力 == 会員価格:18,000円(2,000円お得)

ヒント

割引後の価格と割引額をそれぞれ変数にする。Math.round で整数にする。

模範解答
const price: number = 20000;
const isMember: boolean = true;

const finalPrice: number = isMember ? Math.round(price * 0.9) : price;
const discount: number = price - finalPrice;

console.log(`会員価格:${finalPrice.toLocaleString()}円(${discount.toLocaleString()}円お得)`);
解説

boolean で処理を分岐させ、number で計算する——型が違えば役割も違う。この対応関係が明確なほど、コードは読みやすくなる。

TS01-S04 【在庫評価】商品名「モニター」・単価45000円・在庫7個を型注釈付きで宣言し、次の3行を出力せよ。
「商品:モニター」
「在庫金額:315,000円」
「在庫状態:要補充」(在庫10個未満なら「要補充」、10以上なら「十分」)
コーディング★★★無料
期待される結果

出力3行が完全一致

ヒント

在庫金額は単価×在庫。状態は三項演算子で判定する。

模範解答
const productName: string = "モニター";
const price: number = 45000;
const stock: number = 7;

const stockValue: number = price * stock;
const stockStatus: string = stock < 10 ? "要補充" : "十分";

console.log(`商品:${productName}`);
console.log(`在庫金額:${stockValue.toLocaleString()}円`);
console.log(`在庫状態:${stockStatus}`);
解説

判定結果を string 型の変数に入れている点に注目。「要補充」か「十分」のどちらかしか入らないはずだが、今の書き方ではどんな文字列でも入れられてしまう。TS06のリテラル型を学ぶと、これをより厳密に表現できる。

TS01-S05 【注文明細の計算】単価8500円・数量3・会員(true)を型注釈付きで宣言し、次の4行を出力せよ。
「小計:25,500円」
「会員割引:-2,550円」
「消費税:2,295円」(割引後の10%、四捨五入)
「合計:25,245円」
コーディング★★★無料
期待される結果

出力4行が完全一致

ヒント

小計→割引→割引後→税→合計の順に計算する。それぞれ型注釈付きの変数にする。

模範解答
const price: number = 8500;
const qty: number = 3;
const isMember: boolean = true;

const subtotal: number = price * qty;
const discount: number = isMember ? Math.round(subtotal * 0.1) : 0;
const afterDiscount: number = subtotal - discount;
const tax: number = Math.round(afterDiscount * 0.1);
const total: number = afterDiscount + tax;

console.log(`小計:${subtotal.toLocaleString()}円`);
console.log(`会員割引:-${discount.toLocaleString()}円`);
console.log(`消費税:${tax.toLocaleString()}円`);
console.log(`合計:${total.toLocaleString()}円`);
解説

計算の各段階を変数に分けているのが要点。1つの式にまとめることもできるが、段階ごとに名前を付けたほうが検算しやすく、後から読む人にも計算の流れが伝わる。

5仕上げ課題

TS01-FINAL 【請求書の計算】ここまでの型注釈を使って、請求書の金額計算を実装せよ。

与えられた条件(すべて型注釈付きで宣言すること)
・店舗名 shopName:「ゼロカラ商店」(文字列)
・商品名 itemName:「ノートPC」(文字列)
・単価 price:128000(数値)
・数量 qty:2(数値)
・会員フラグ isMember:true(真偽値)

計算の順序
① 小計 = 単価 × 数量
② 会員割引 = 会員なら小計の10%(四捨五入)、非会員なら0
③ 割引後 = 小計 - 割引
④ 送料 = 割引後が5,000円以上なら0、未満なら600
⑤ 消費税 = (割引後+送料)の10%(四捨五入)
⑥ 合計 = 割引後 + 送料 + 消費税

期待される出力(6行)
=== ゼロカラ商店 請求書 ===
ノートPC 128,000円 × 2
小計:256,000円
会員割引:-25,600円
送料:0円
合計:253,440円
期待される結果

出力6行が完全一致

ヒント

変数は7つ以上になる(店舗名・商品名・単価・数量・会員・小計・割引・割引後・送料・税・合計)。すべてに型注釈を付ける。最後の合計は割引後230400+送料0+税23040=253440。

模範解答
const shopName: string = "ゼロカラ商店";
const itemName: string = "ノートPC";
const price: number = 128000;
const qty: number = 2;
const isMember: boolean = true;

const subtotal: number = price * qty;
const discount: number = isMember ? Math.round(subtotal * 0.1) : 0;
const afterDiscount: number = subtotal - discount;
const shipping: number = afterDiscount >= 5000 ? 0 : 600;
const tax: number = Math.round((afterDiscount + shipping) * 0.1);
const total: number = afterDiscount + shipping + tax;

console.log(`=== ${shopName} 請求書 ===`);
console.log(`${itemName} ${price.toLocaleString()}円 × ${qty}`);
console.log(`小計:${subtotal.toLocaleString()}円`);
console.log(`会員割引:-${discount.toLocaleString()}円`);
console.log(`送料:${shipping}円`);
console.log(`合計:${total.toLocaleString()}円`);
解説

JavaScript編のJS08で書いたのと、ほぼ同じ計算だ。違いは全ての変数に型注釈が付いていること——それだけ。TypeScriptは新しい言語を覚え直すものではなく、今まで書いてきたコードに情報を足していくものだと分かるはずだ。

では、その情報に何の意味があるのか。たとえば const qty: number = 2; と書いてあれば、後から読む人は「ここに '2個' のような文字列は入らない」と確信できる。もし誰かが誤って qty = "2個" と書き換えようとしたら、実行する前にエディタが赤線で止めてくれる。JavaScriptなら 128000 * "2個"NaN になり、請求書に「NaN円」と印字されて初めて気づくことになる。

型は「未来の自分と他人へのメッセージ」であり、同時に「間違いを実行前に止める壁」でもある。この2つの価値が、コードが大きくなるほど効いてくる。

次章では、この型注釈をより詳しく学ぶ。どんな型があり、どう使い分けるのか——TypeScriptの語彙を増やしていく。