TypeScriptでpropertyを舐める処理が面倒くさい

TypeScript面倒くさい問題の一つ、プロパティを列挙してアクセス
https://t.co/oukdNOiVSV うーん、やっぱこれかなぁ?
— wtnabe, yet another yak shaver (@wtnabe) October 4, 2024
TypeScriptでオブジェクトの全プロパティを走査するときの注意点 | JavaScript/TypeScriptメモ
これです。
JavaScript の時は伝統的に
for (const k in obj) {
obj[k]
}
こういうコードをカジュアルに書いてしまっていたんだけど、TypeScript では
for (const k in obj) {
obj[k] // <- error !
}
怒られます。1
これは k として取得できる key の型が string になってしまうため2。この結果
obj[k]として値が取得可能な key とは限らない- その結果
obj[k]はanyになってしまう - もしこれを何かに代入すると unsafe ですよ
が起きるから。
どうせ値のチェックは自分でやるので
obj[k as keyof typeof obj]
と書きましょう。
どうせ値のチェックはするので。 するよね?