2月中に予定されているリリースで,TypeScript 2.2はRCに到達する。React Native用の新たなJSX emitモードに加えて,非ネイティブ型を表現するobject
型,ミックスインのサポート向上,構成可能(composable)なクラスなどが新たに含まれている。
TypeScript 2.2の提供する新しいobject
型は,非プリミティブ型のみを受け入れるメソッドのシグネチャを指定するためのものだ。Object.getPrototypeOf
やObject.create
といった,構文的には任意のオブジェクトを受け入れるが,文字列や数値が渡された場合に例外をスローするような場合がこれにあたる。object
型を使うことで,こういった誤用をコンパイル時に検出することが可能になる。
function mapObject(obj: object): object { /* ... */ }
...
mapObject('string'); // 型エラー
TypeScript 2.2では,ミックスインと構成可能な型の生成に関する柔軟性も向上している。例えば,Point
オブジェクトのコンストラクタを取得して,timestamp
を追加することでPoint
を拡張し,インスタンス化と拡張の可能な新しいTimestampedPoint
ミックスインクラスを返す関数を作成できるようになった。
class Point {
...
}
export type Constructable = new (...args: any[]) => object;
export function Timestamped<BC extends Constructable>(Base: BC) {
return class extends Base {
timestamp = new Date();
};
const TimestampedPoint = Timestamped(Point);
const p = new TimestampedPoint(10, 10);
class SpecialPoint extends Timestamped(Point) {
z: number;
constructor(x: number, y: number, z: number) {
...
}
}
TypeScriptでは,セマンティクスの拡張なしで属性を持つツリー構造を表現するために,XML風の言語拡張であるJSXが以前からサポートされていた。唯一ではないが典型的なJSXの用途は,UIコンポーネントの記述だ。バージョン2.1までのTypeScriptでは,tsx
ファイルに記述されたJSX式を扱うために,JSX式を保持して後段の処理で使用可能にするpreserve
と,React.createElement
を用いるjs
ファイルを生成するreact
という,2つの特別なemitモードが用意されていた。バージョン2.2で新たに設けられたreact-native
モードは,JSX式をすべてそのまま残しながら,React Nativeのローダに必要なjs
ファイルを生成する。
TypeScript 2.2rcにはこの他にも,次のような注目すべき変更が含まれている。
TypeScript 2.2rcを試すには,次のコマンドを実行すればよい。
npm install -g typescript@rc
この記事を評価
- 編集者評
- 編集長アクション