TypeScript オブジェクトに指定したキーがあるかをチェックする

主に unknown な値をオブジェクト型に狭めて、その後に特定のプロパティにアクセスしたい場合の話。

const hasProp = <K extends PropertyKey>(data: object, prop: K): data is Record<K, unknown> {
    return prop in data;
}

使い方

const myFunc = (data: unknown) => {
    if(typeof data !== 'object' || data === null) return false
    if(!hasProp(data, 'hoge')) return false

    data.hoge // hoge は unknown となりエラーにならない

    return true
}