はじめに
Object.keys()の返り値の型がstring[]になるのを避ける策として型アサーションがありますが、
ソースコードに型アサーションをあまり増やしたくない。。その解決策メモ
問題点
string[]が型推論される
const user = {
name: "abc",
age: 10
}
const keys = Object.keys(user) // string[]
const assertKeys = Object.keys(user) as (keyof typeof user)[] // ("name" | "age")[]
解決策
Object.keysをラップした関数を作成する
内部でType Assertionsを使用する
const myObjectKeys = <T extends Record<string, unknown>>(obj: T)=> Object.keys(obj) as (keyof T)[]
const keys = myObjectKeys(user) // ("name" | "age")[]