objectの具体的な形にアクセスすると矛盾が生じる
Exact型がない状況下では、propertyの全取得をしたら、型と異なるものが含まれている可能性がある 参考
この記事が詳しい
これたぶん厳密に書き出すと割と多くのパターンがあると思うmrsekut.icon
↓に書いているのだけでは足りない
optional?を使ったときや、readonlyを使ったときなどの分岐も考えられるし
例
code:ts
const x = { foo: 42, bar: 'xxx' };
const y: { foo: number } = x; // 型としてはok
console.log(Object.entries(y)); // "foo", 42], ["bar", "xxx". 想定しているものと異なる
以下のようなmethodを使わない
あるいは、使用時に型が壊れる可能性に気をつけるmrsekut.icon
objectのpropertyの存在判定をするもの
propertyの列挙をするもの
列挙したpropertyを利用するもの
この内、optional?に関係するものは、
下記の場合なら使用しても良さそう
アクセスしようとしているobjectが、as constで定義された実変数になっている
etc.
しかし、コードを眺めて
「ここのObject.valuesは安全だからokだけど、こっちは駄目だね」というのを、
コンパイラは教えてくれず、人間が判断しないといけないので、すごくダルいなmrsekut.icon
project全体を、fp-tsとかに統一すれば、上のようなmethodを一切使わなくても書けるようになるんじゃないかな