https://devblogs.microsoft.com/typescript/announcing-typescript-5-2-beta/
全部まとめたかったけど気になるやつだけ。
コードは全て上記ページから引用。
using Declarations and Explicit Resource Management
using
という宣言が追加された- スコープと連動したリソースのクリーンアップ(fileのcloseや一時ファイルの削除など)を行うための方法が追加された)
こんな処理がある
一時ファイルを作って何かして、処理の最後で一時ファイルを閉じて、削除する。
Early returnすると同じ処理を2回書く必要がある。try/catchで囲んでfinallyで行えば一度で済むがあまり見通しは良くない。
そこでTS5.2では新たに Symbol.dispose
というのが追加された。 Symbol.dispose
という名前のメソッドを実装しその中でクリーンアップ処理行う。( Symbol.dispose
を実装するインタフェースである Disposable
も追加されている)
そしてこのクラスを使うときに新たに追加された using
メソッドを使う
すると doSomeWork
を抜けたところで自動的に Symbol.dispose
が実行される
Disposableなクラスを実装するまでもない場合には DisposableStack
というのが使える。
DisposableStack
のインスタンスを作り、deferメソッドの引数にクリーンアップ処理を渡していくと同じくスコープを抜けたときに実行してくれる。
他に知っておいた方が良さげなこと
- disposeの処理は先入れ後出し(FILO)で実行される。Golangのdeferとかと同じ
- disposeの処理で非同期処理を入れたい時のために
Symbol.asyncDispose
AsyncDisposable
AsyncDisposableStack
というのも用意されている
Named and Anonymous Tuple Elements
- tupleの要素に名前が付けられるようになったよ
- つけるなら全ての要素につけないとダメだよ
Easier Method Usage for Unions of Arrays
上記のコードがTS5.2より前ではエラーになり、TS5.2では通るようになった。
filterやfindなどのメソッドのシグネチャは
こうなっているので従来Tの型が確定できなかったが、TS5.2ではこういったケースの時に (number | string)[]
として扱ってくれるようになる。(配列型・タプル型のみ)
これによってチェックが通るようになる。
この場合返り値の型も (number | string)[]
となってしまう点に注意
(個人的にはこのケースで困った試しがあまりないが……)