👍
TypeScript 5.4 の NoInfer が良さそう
Announcing TypeScript 5.4
Announcing TypeScript 5.4を眺めていて、NoInfer という Utility Type が追加されたことを知りました!
記事を読んでいると良さそうだったので、二番煎じではありますが試した内容を残しておきます!
背景
提案されたのは、7年前のこちらの Issue のようでした。
class Animal { move }
class Dog extends Animal { woof }
function doSomething<T>(value: T, getDefault: () => T) { }
// Wanted an error here - getDefault() ought to return same type as 'value'
doSomething(new Dog(), () => new Animal());
doSomething の 第二引数で返される ジェネリクスT は、第一引数のDog であるように制限したいが、Dog が Animal を extends しているので、型推論が効いてしまって Animal でも型エラーにならないことが良くないのではないかといった内容です。
Playground で試してみる

NoInfer を使っていない場合は、型推論が効いて Animal になっているのが分かります。

NoInfer を使うことで、型推論を制限することができ、第一引数に渡した Dog であることをチェックしてくれるようになりました!🎉
もう少し試してみます〜
getCountries という第一引数に countries を、第二引数に defaultCountry を受け取るような関数があるとします。
このとき、NoInfer をつけていないと、defaultCountry が countries に含まれない場合でもエラーにはなりません。

しかし、NoInfer をつけると第一引数の countries で型推論を制限してくれるようになりました〜!

Discussion