BT

InfoQ ホームページ ニュース Object型,ミックスインサポート改善などが加えられたTypeScript 2.2

Object型,ミックスインサポート改善などが加えられたTypeScript 2.2

ブックマーク

原文(投稿日:2017/02/10)へのリンク

2月中に予定されているリリースで,TypeScript 2.2はRCに到達する。React Native用の新たなJSX emitモードに加えて,非ネイティブ型を表現するobject型,ミックスインのサポート向上,構成可能(composable)なクラスなどが新たに含まれている。

TypeScript 2.2の提供する新しいobject型は,非プリミティブ型のみを受け入れるメソッドのシグネチャを指定するためのものだ。Object.getPrototypeOfObject.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
 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには InfoQアカウントの登録 または が必要です。InfoQ に登録するとさまざまなことができます。

アカウント登録をしてInfoQをお楽しみください。

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

コミュニティコメント

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

HTML: a,b,br,blockquote,i,li,pre,u,ul,p

BT

あなたのプロファイルは最新ですか?プロフィールを確認してアップデートしてください。

Eメールを変更すると確認のメールが配信されます。

会社名:
役職:
組織規模:
国:
都道府県:
新しいメールアドレスに確認用のメールを送信します。このポップアップ画面は自動的に閉じられます。