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”を参照してほしい。
この記事を評価
- 編集者評
- 編集長アクション