新機能Typescript 1.4の発表

Typescript 1.3のリリースでは、型システムの改善とTypeScriptへのECMAScript 6機能の追加に重点を置いていました。 新しいバージョンで使用できるいくつかの新機能を見てみましょう。



この記事で説明されているものはすべて、 Githubのリポジトリーの masterブランチに既に実装されています 。今すぐダウンロードして試してみてください。







新機能により、実行時に異なる型の変数をより正確かつ簡単に操作できます。 タイプを明示的に指定、チェック、またはタイプany



使用する必要がある場所の数を減らします。 .d.ts



ファイル作成者( .d.ts



)は、これらの機能を使用して外部ライブラリを記述することもできます。 コンパイラの開発をフォローしている人は、私たち自身もそれらを使用していることに気付いているかもしれません。



関連付けタイプ



一般的な情報



ユニオン型は、いくつかの型のいずれかが持つことができる値を表現する強力な方法です。 string



またはstring[]



形式でコマンドライン引数を取るプログラムを実行するAPIがあるとします。 これで、次のように書くことができます。



 interface RunOptions { program: string; commandline: string[]|string; }
      
      





このタイプの値の割り当ては直感的に機能します-列挙のメンバーのいずれかに割り当てられる値はすべて機能します。



 var opts: RunOptions = /* ... */; opts.commandline = '-hello world'; // OK opts.commandline = ['-hello', 'world']; // OK opts.commandline = [42]; // :  number    string  string[]
      
      





変数にアクセスする場合、ユニオンのすべてのタイプ共通のプロパティを直接使用できます。



 if(opts.commandline.length === 0) { //  string  string[]   length console.log("!"); }
      
      





型制約を使用すると、結合型変数の操作は簡単で簡単です。



 function formatCommandline(c: string[]|string) { if(typeof c === 'string') { return c.trim(); } else { return c.join(' '); } }
      
      





タイプリミッター



Javascriptの一般的なプラクティスは、 typeof



またはinstanceof



演算子を使用して、実行時に値のタイプを決定することです。 Typescriptは、これらのコンストラクトを理解し、条件ブロックで使用される場合、タイプ推論で使用します。



 var x: any = /* ... */; if(typeof x === 'string') { console.log(x.subtr(1)); // :   'string'   'subtr' } //      'x'    'any' x.unknown(); // OK
      
      





これは、 instanceof



をクラスおよびユニオン型で使用する方法です。



 class Dog { woof() { } } class Cat { meow() { } } var pet: Dog|Cat = /* ... */; if(pet instanceof Dog) { pet.woof(); // OK } else { pet.woof(); // Error }
      
      





より強力なジェネリック型



また、場合によっては、一般化されたコール検証をより厳密にすることも決定しました。 たとえば、そのようなコードの前に、奇妙なことに、エラーなしでコンパイルされます:



 function equal<T>(lhs: T, rhs: T): boolean { return lhs === rhs; } // :   //  :  -     'number'  'string' var e = equal(42, 'hello');
      
      





型推論の改善



ジェネリック型は、配列を使用するときや、同じコレクションで複数の異なる型を使用できる他の場所で、チェックの品質を改善できます。



 var x = [1, 'world']; // x: Array<string|number> x[0] = 'hello'; // OK x[0] = false; //  -  'boolean'    'number',  'string'
      
      





タイプエイリアス



type



キーワードを使用して、 type



エイリアスを宣言できます。



 type PrimitiveArray = Array<string|number|boolean>; type MyNumber = number; type NgScope = ng.IScope; type Callback = () => void;
      
      





型エイリアスはその完全な同義語であり、使用時に完全に交換可能です。



次の記事では、Typescriptに追加するECMAScript 6の機能について説明します。 詳細を確認して自分で試してみるには、 GithubのTypescriptリポジトリからmaster



ブランチをダウンロードして、共有してみてください。



翻訳者のメモ





Typescript 1.3では、配列からタプルを使用する機能が導入されています。 ただし、自動型推論は発生しません。



 // : [number, string] //  : Array<string|number> var x = [1, 'world'];
      
      





なぜそれをしたのですか? タプル型の自動出力は、多くのユースケースを壊します。例えば:



 var x = [dog, cat, animal]; //   'x'  'Animal[]' x[0] = new Frog();
      
      





変数x



型がタプル[Dog, Cat, Animal]



として推定された場合、2行目の割り当てはエラーを引き起こします。 著者は、タプルの明示的な表示を要求することがより適切であると考えました。これはかなり論理的に聞こえます。



さらに、タプルは列挙型と一方的に互換性があります。

 var x : [number, string] = [1, "test"]; var y : Array<number|string> = x; //    x = y; // :      
      
      





むしろ、これらの機能のサポートはResharperに当たります!



UPD:Typescript用に別のハブを作成するときですか?



All Articles