1. test 1
  2. test 2
  3. test 3
  4. test 4
  5. test 5
  6. test 6
コース一覧
TypeScript道場 fleama開発室の10問
このanyを撲滅せよ

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分

このanyを撲滅せよ

初段 / 目安 15分

三日目、凛さんの声がいつもより低くなっていました。

「any、3箇所見つけました。全部消してください。……推論に任せられる箇所は、書かなくて結構です」

any は「何でもあり」を意味する型です。any と書かれた値には、TypeScript は一切口を出しません。数値に対して .toUpperCase() を呼んでも、存在しないプロパティを触っても、素通りします。any を1つ置くたびに、その周辺だけ JavaScript に戻ります。

では any をどうやって消すのでしょうか。方法は2つあります。

1つめは、正しい型に置き換えることです。引数のように、外から何が来るか TypeScript には分からない場所では、こちらを使います。

2つめは、注釈そのものを消すことです。const total: any = 0 のように初期値がある変数なら、注釈を消すだけで TypeScript が number だと推論してくれます。凛さんが「書かなくて結構です」と言ったのはこの話です。注釈は多ければ良いものではありません。引数と戻り値のように、推論が届かない境界にだけ書くのが、読みやすい TypeScript です。

今回の題材は、fleama の出品リストから売上合計を求める処理です。

完成条件

価格の配列と、送料込みかどうかのフラグを受け取り、合計金額を返す関数 totalPrice を作ってください。

  • 価格の配列の合計を求めること
  • 送料込みフラグが true のときは、合計に一律250を足すこと
  • 配列が空のときは、送料込みでも0を返すこと
  • any を1つも書かないこと。初期値から型が分かる変数には、そもそも注釈を書かないこと

進め方

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

any を使っていないことは、実行では測れません。テストは合計金額だけを見ます。それでも any を書かないでください。ここで手を抜いても誰も気づきませんが、気づかれない場所で手を抜かない練習が、この一問の本体です。

要件

  1. 関数名は totalPrice、引数は価格の配列と送料込みフラグの2つ
  2. any を1つも書かないこと
  3. 初期値から型が分かる変数には注釈を書かず、推論に任せること
  4. 送料込みフラグが true のときは合計に250を足すこと
  5. 価格の配列が空のときは、送料込みでも0を返すこと

入出力例

totalPrice([380,1200,640], false) → 2220 totalPrice([380,1200,640], true) → 2470 totalPrice([], true) → 0 totalPrice([], false) → 0 totalPrice([4200], true) → 4450 totalPrice([100,100,100,100], false) → 400

ヒント

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

①方針 合計を入れる箱を0で始め、配列を1周して足し込みます。最後に、配列が空でなく、かつ送料込みのときだけ250を足します。空判定を忘れると、出品ゼロなのに250円の売上が立ちます

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

関連レッスン

  • Item型を設計せよ

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

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

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

  • APIレスポンスに型を通せ

    入れ子になったAPIレスポンスを、as を使わずに型の入れ子で表します。通信の向こう側まで型を届かせます。

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

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

  • TypeScript静的型を加えた JavaScript の上位互換
  • プロパティメソッドを属性のようにアクセスできるようにするデコレータ。
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 引数位置引数=順番で渡す。
  • 変数データに名前をつけて参照する仕組み
  • 戻り値呼び出し元への返答を表す点線矢印
  • リスト順序付きで複数の値を扱うデータ構造
  • 処理計算や代入を表す長方形
main.ts
学習モード
エディタを読み込んでいます

メモ

このanyを撲滅せよ

⌘S で保存