IT-Q
シナリオ/TypeScript 実戦編(既存プロジェクトへの参画)

TypeScript 実戦編(既存プロジェクトへの参画)

既存の TypeScript プロジェクトに途中から入る想定の技術面談。 any だらけのコードの直し方、6.0・7.0 への更新、型と実行時のずれ、tsconfig の読み方まで、 答えると追撃が最大3手来ます。

20 問63 ノード三手目 3 本三 手まで掘る

答えるまで正解と解説は表示されません。下の一覧は解説つきのカタログなので、答えを見たくない場合は先に始めてください。

質問カタログ(模範解答つき)

面接官が何を見ているか、模範解答は何かを先に読みたい場合はこちらから。

  1. 01参画したプロジェクトで、any が数百か所に使われていました。どう進めますか。
  2. 02TypeScript を 5.x から 6.0 に上げたら、「process が見つからない」というエラーが大量に出ました。何を疑いますか。
  3. 03コードに as が大量に使われていました。何が問題ですか。
  4. 04// @ts-ignore が多く使われていました。// @ts-expect-error との違いは何ですか。
  5. 05strict が無効のまま育ったプロジェクトで、strict を有効にしたい。どう進めますか。
  6. 06const timeout = options.timeout || 3000 と書かれていて、timeout に 0 を指定したのに 3000 になりました。なぜですか。
  7. 07画面の状態が { isLoading: boolean; error?: string; data?: User } で管理されていました。何が問題ですか。
  8. 08参画先で、TypeScript をビルドせず Node.js で直接(型を取り除いて)動かす方針になりました。enum が多用されています。どうしますか。
  9. 09window に独自のプロパティ(window.appConfig)を足したら、型エラーになりました。どう型を付けますか。
  10. 10tsc の型チェックに数分かかるようになりました。何から手を付けますか。
  11. 11function findById<T>(items: T[], id: string) と書いたら、中で item.id を読むところでエラーになりました。どうしますか。
  12. 12tsconfig の paths で @/ を src に割り当てたら、型チェックは通るのに、tsc で出力した JavaScript を実行すると import が見つからず落ちました。なぜですか。
  13. 13catch (e) の中で e.message と書いたら、「e は unknown 型です」とエラーになりました。どう直しますか。
  14. 14import * as express from "express" と書かれていて、express() を呼ぶところで型エラーや実行時エラーになりました。なぜですか。
  15. 15const routes: Record<string, string> = { home: "/", about: "/about" } と書いたら、routes.contact のような存在しないキーでもエラーにならなくなりました。どうしますか。
  16. 16社内の古いライブラリを import したら、「Could not find a declaration file for module」というエラーが出ました。@types も無いようです。どうしますか。
  17. 17上位3件を返す関数 top3(users: User[]) の中で users.sort(...) を呼んでいたため、呼び出し側の一覧の並び順まで変わっていました。型でどう防ぎますか。
  18. 18レスポンスの型を Omit<User, "pasword"> と書いていました(綴りの間違い)。それでもエラーになりませんでした。なぜですか。
  19. 19const scores = ids.map((id) => scoreMap.get(id)).filter((s) => !!s) と書いたのに、scores が (number | undefined)[] のままで、合計を出すところでエラーになります。どうしますか。
  20. 20Node.js で型を取り除いて直接動かしたら、import { User } from "./types.ts" の行で「User という export が無い」と落ちました。User は interface です。どう直しますか。