ユーザー定義型ガード

外部からデータを受け取る場合、アプリが停止することを防ぐためにデータの型をチェックする必要がある typeof演算子やin演算子の他、ユーザー定義型ガードを利用することでチェックできる

{
  "setting1": 1,
  "setting2": "a"
}
import * as data from "./json/data.json";

type Data = {
  setting1: number,
  setting2: string,
}

/**
 * ユーザ定義型ガード
 * 関数の返り値の型を 引数 X is T と書くことで、
 * 条件がtrueを返す場合は X は T であり、
 * falseを返す場合は T ではないとTypeScriptに指示することができる
 */
const isData = (arg: unknown): arg is Data => {
  const data = arg as Data
  return (
    typeof data?.setting1 === "number" && typeof data?.setting2 == "string"
  )
};

if (isData(data)) {
  console.log("OK")
} else {
  console.log("NG")
}
// OK

備考

ユーザー定義型ガードを自分で書くのは面倒かつ危険なのでライブラリが色々ある io-ts など