1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
コース一覧
TypeScript道場 fleama開発室の10問
赤い波線を消せ

TypeScript道場 fleama開発室の10問

TypeScript入門で身に付けた技を、商店街公式フリマアプリ「fleama」開発室の仕事で試す演習専用コースです。解説はありません。依頼と完成条件だけを読み、白紙から自分で組み立てます。手が止まったときのために、方針・使う構文・部分解の3段階のヒントを各問に用意しています。判定はコンパイラそのものです。型が通らないコードは実行される前に不合格になるので、まず tsc を黙らせてから中身を合わせることになります。基本型の注釈から始まり、関数の署名、any の撲滅、interface の設計、リテラルunion、型ガード、ジェネリクス、入口での変換、入れ子のAPIレスポンスを経て、最後は型のないモジュールを strict で通る形に組み直すところまで、10問で TypeScript の主要な道具を一巡します。1問10分から45分、全10問で約4.5時間です。TypeScript入門を終えて「読めるけれど自分では書けない」と感じている方に向いています。

1
初段
01. 赤い波線を消せ10分
02. 関数に正しい型を付けよ15分
03. このanyを撲滅せよ15分
04. Item型を設計せよ20分
2
中段
01. 不正な状態を型で封じよ25分
02. 型ガードで絞り込め25分
03. 汎用関数に型を付けよ30分
04. 型を付けて事故を防げ30分
3
師範
01. APIレスポンスに型を通せ35分
02. 総合 型のないモジュールを完全TS化45分

赤い波線を消せ

初段 / 目安 10分

商店街公式フリマアプリ「fleama」の開発室に、助っ人として招かれました。案内してくれたのはテックリードの凛さんです。静かな人で、机の上には物がほとんど置かれていません。

「歓迎します。ルールは1つ。私のCI、つまり tsc が通らないコードはマージしません」

そして凛さんはエディタを開いて、こちらに向けました。「新人が書いた商品表示のコード、エディタが波線だらけです。型注釈を付けて静かにしてください」

TypeScript は、値の形をあらかじめ書いておける JavaScript です。const name = "みかん" と書けば、TypeScript は勝手に「これは文字列だ」と推論してくれます。ただしこの道場の第一問では、あえて手で書いてもらいます。型注釈の書き方そのものを、指が覚えている状態にしておきたいからです。

書き方は変数名のうしろに半角の記号を1つ置き、そのあとに型名を並べるだけです。基本の型は3つ覚えれば当面足ります。文字列は string、数値は number、真偽値は boolean です。TypeScript には String や Number のような大文字始まりの型も存在しますが、日常で使うのは小文字のほうです。ここでも小文字を使ってください。

完成条件

商品名・価格・売切れフラグの3つを受け取り、商品表示用の1行を返す関数 describeItem を作ってください。

関数の中で、3つの変数を型注釈つきで宣言してから使ってください。

返す文字列の形は次のとおりです。

プレーンテキスト

みかん 380円 販売中
  • 売切れフラグが true のときは末尾を 売切れ にすること
  • false のときは末尾を 販売中 にすること
  • 「円」の前後に余分なスペースを入れないこと。区切りは半角スペース1つ

進め方

白紙から書いてください。手が止まったらヒントを開けます。ヒントは3段階で、①方針、②使う構文、③部分解の順に出ます。1つも開けずに通せたら、その問題は自分のものです。

判定は凛さんのCIと同じものです。型が1つでも合っていなければ、実行にすら進みません。逆に言えば、型さえ通ればあとは普通の JavaScript です。恐れることは何もありません。

要件

  1. 関数名は describeItem、引数は商品名・価格・売切れフラグの3つ
  2. 引数と戻り値にも型注釈を付けること
  3. 関数の中で、商品名は string、価格は number、売切れフラグは boolean の型注釈つきで変数を宣言すること
  4. 売切れフラグが true なら末尾を「売切れ」、false なら「販売中」にすること
  5. 「みかん 380円 販売中」の形の文字列を return で返すこと

入出力例

describeItem("みかん", 380, false) → "みかん 380円 販売中" describeItem("中古スニーカー", 4200, true) → "中古スニーカー 4200円 売切れ" describeItem("手編みマフラー", 1800, false) → "手編みマフラー 1800円 販売中" describeItem("レトロ湯呑み", 0, false) → "レトロ湯呑み 0円 販売中" describeItem("商店街トートバッグ", 990, true) → "商店街トートバッグ 990円 売切れ"

ヒント

前のヒントを開くと次が開きます。開かずに解けると未開封クリアです

①方針 まず3つの変数を型注釈つきで宣言し、引数の値をそのまま入れます。そのあと売切れフラグで末尾の言葉を決め、最後に1本の文字列に組み立てて返します

ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/09

関連レッスン

  • 関数に正しい型を付けよ

    手数料計算の関数に、引数と戻り値の型を付けます。署名を読めば中身を読まなくて済む形にします。

  • このanyを撲滅せよ

    散らばった any を消します。推論に任せられる箇所は、あえて書かないことも腕前のうちです。

  • Item型を設計せよ

    出品データの形を interface として宣言します。省略可能と書き換え不可を、記号で表し分けます。

  • 不正な状態を型で封じよ

    商品状態を3つのリテラルの union にし、それ以外が存在できない世界にします。typo が実行前に死にます。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • マージブランチを統合する操作。
  • 型注釈変数や引数に : 型 で宣言する書式
  • TypeScript静的型を加えた JavaScript の上位互換
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 変数データに名前をつけて参照する仕組み
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
  • 戻り値呼び出し元への返答を表す点線矢印
main.ts
学習モード
エディタを読み込んでいます

メモ

赤い波線を消せ

⌘S で保存