BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース パラメータ反変性などを加えたTypeScript 2.6

パラメータ反変性などを加えたTypeScript 2.6

ブックマーク

原文(投稿日:2017/11/01)へのリンク

TypeScript 2.6の新機能のひとつに、パラメータに反変性(Contravariance)を適用する新しいフラグと、ツーリングの改善がある。

TypeScript 2.6には、新たに--strictFunctionTypesコンパイラオプションが追加されており、関数パラメータを反変的(Contravariant)に評価することが可能になった。

{
"compilerOptions": {
    "strictFunctionTypes": true
}

既定の動作では、関数パラメータはバイバリアント(Bivariant、双変的)に評価される。これはJavaScriptの基本的な機能の多く、特にArray<T>を正しく動作させるために必要だ。実際に、反変性をパラメータ(例えば、より一般的な型を返す関数が期待される場合でも、その他のシグネチャが同じであれば、より厳密な型を返す関数が使用される)および戻り値(例えば、より特定された型を取る関数が期待される場合でも、その他のシグネチャが同じであれば、より一般的な型を取る関数が使用される)に適用することにより、Array<T>Tについてインバリアント(Invariant、反変)、すなわちArray<Derived>Array<Animal>に割り当てられることはなくなる。バイバリアントなパラメータでは、Arrayの適切な動作は保証されるが、以下のようなケースで実行時エラーを発生する可能性がある。


function makeLowerCase(s: string) { return s.toLowerCase(); }
declare let foo: Promise<string|number>;
foo.then(makeLowerCase); // this will fail if foo resolves to a number

新たな--strictFunctionTypesにより、このようなエラーをキャッチすることが可能になる。Arrayやその他の言語機能が期待通りの動作を維持できるように、このオプションはメソッドではなく、関数にのみ適用される。もうひとつの有用な追加機能は@ts-ignoreコメントである。これは、コメントに続く行で発生する任意のエラーを無効にするものだ。例えば以下のスニペットでは、@ts-ignoreコメントによって到達不能なコードに関するエラーを無効にしている。


if (false) { 
    // @ts-ignore: Unreachable code error
    console.log("hello");
}

ツーリングの面では、変更の影響を受ける可能性のあるファイルをより正確に識別できるようになったことで、より高速な--watchモードがTypeScriptコンパイラに実装された。これにより、影響を受けるファイルのみを対象としたツリー変換とパスの出力を行なうようになる。

さらに、JDSocコメントを適切なTypeScriptパラメータアノテーションに変換できるようになった。これにより、既存のコードベースのマイグレーションが容易になり、JSDoctタイプのアノテーションが自動的に追加される。

TypeScript 2.6では、既存のコードベースを棄損する可能性のある変更もいくつか導入されている。特に注意すべきなのは、--noUnusedLocals--noUnusedParametersを使用した場合に、書込み専用の参照がエラーとして識別されることだ。また、宣言ファイルと宣言モジュールブロックでは、デフォルトのエクスポートに式を書くことはできない。

TypeScript 2.6のインストールには、以下のコマンドを実行する。

npm install -g typescript

TypeScript 2.6の詳細については“What’s new in TypeScript”を参照してほしい。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

こんにちは

コメントするには 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