function isString(x: unknown): x is string のような型述語(type predicate)は、何をするものですか。
戻り値の型の位置に x is string と書くと、関数が true を返したとき、呼び出し側でその値を string として扱わせます。実際に確かめるのは関数の中のコードです。
面接官が見ているのは補強。型述語が呼び出し側の絞り込みに使われることを知っているか。
よくある答えと、面談でどう見られるか
- 関数が true を返したら、呼び出し側でその値を指定した型として扱わせる
その通りです。if (isString(x)) の中で x が string になります。 - 実行時に引数の型を確かめてくれる
確かめるのは関数の中のコードです。型述語は、その結果を TypeScript に伝えるだけです。 - 戻り値の型を string にする
戻り値は boolean です。x is string は、true のときの x の型を伝えます。 - 引数に string 以外を渡すとコンパイルエラーにする
引数は unknown なので何でも渡せます。渡した後の絞り込みに使われます。
模範解答
戻り値の型の位置に x is string と書くと、その関数が true を返したとき、呼び出し側で x を string として扱わせます。
if (isString(value)) {
value.toUpperCase() // ここでは string
}関数自体は boolean を返すだけで、実際に確かめるのは中に書いたコードです。TypeScript は中身が正しいかを確かめないので、判定が甘ければ間違った型で通ります。
出典(一次資料)
対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。