👍
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