UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【TypeScript】Object.keysの型をstring[]ではない型にしたい

Object.keys を使う時、その戻り値の型が string[] になっているので、keyを使って何か処理をしたいときに string型として値を使わなければならない

そのため、これまで以下のようにasを使って値を他の型に強制していたが、全ての使用箇所で付けなければならくなってしまうのでやめたい

type Season = "Spring" | "Summer" | "Autumn" | "Winter"

type Seasons = { [K in Season]: string }
const seasons = { Seasonsを実装したオブジェクト }

Object.keys(seasons).map((key) => ({
   value: key as Season,
   label: labels[key as Season],
}));

調べるとasはつかなくてはならないみたいだが、少なくとも値の方ではなく Object.keys の方でなんとかしたい

ということで、以下のように Object.keys に as をつけることで key に型をつけることができた

(Object.keys(seasons) as Season[]).map((key) => ({ // key: Season
   value: key,
   label: labels[key],
}));