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