Typescript4.7の新機能をいくつかみてみた
ECMAScript Module Support in Node.js
TypscriptにおけるNode.jsのECMAScript Moduleをサポート
これにより
.mts/.cts
という拡張子が増えた- ESM / CJS ごとに型定義を読み分けられるようになった
- moduleDetectionオプションの追加
など
extends Constraints on infer Type Variables
type FirstString<T> = T extends [infer S, ...unknown[]] ? S extends string ? S : never : never;
infer型に制約を設定できるようになった
type FirstString<T> = T extends [infer S extends string, ...unknown[]] ? S : never;
Instantiation Expressions
以下のような関数(道具箱をつくる)があったとき
interface Box<T> { value: T; } function makeBox<T>(value: T) { return { value }; }
より専門的な道具箱(ハンマーとレンチ)を作る場合、この関数をラップする必要がある
function makeHammerBox(hammer: Hammer) { return makeBox(hammer); } // or... const makeWrenchBox: (wrench: Wrench) => Box<Wrench> = makeBox;
ただ、これをわざわざつくるのは手間なので、4.7では以下のようにジェネリクスで戻り値の型を定義できるようになった
const makeHammerBox = makeBox<Hammer>; const makeWrenchBox = makeBox<Wrench>;
Optional Variance Annotations for Type Parameters
out
とin
のアノテーションをつけることで、T
が入力と出力のどちらの型で使われるのかを明示することができるうようになった
interface Animal { animalStuff: any; } interface Dog extends Animal { dogStuff: any; } // ... type Getter<out T> = () => T; type Setter<in T> = (value: T) => void;