[訳]Type Script 2.0候補版のリリース


関連リンク
Type Script 2.0の正式版はすでに発表されています.〔訳〕Type Script 2.0の正式版は発表されていますが、もっと関心があるのはType Script 2.0の新しい特性です.
Announcing Type Script 2.0 RCAugust 30、2016 by Daniel Rosenwasser
Type Script 2.0候補発行版(RC)が出てきました.Type Script 2.0の最終発表からも遠くないです.いいです.Type Scriptをまだ使っていないなら、まずウェブサイトの教程を見てください.
RCバージョンを使うなら、Type Script 2.0 RC for Visual Studio 2015をダウンロードできます.NuGetを通じてダウンロードすることもできます.または以下のようにnpmを使います.
npm install -g typescript@rc
Visual Studio CodeのユーザーがRCバージョンを使用したいのですが、ここを参照してください.
このRCバージョンは2.0の正式版の様子を見せてくれます.このバージョンを通じてユーザーフィードバックを広く集めて、2.0をより安定的で信頼できるように作ります.一般的には、RCバージョンは十分に安定しています.また、新しい特性を加えたくないです.
しかし、2.0 Betaのリリース以来、多くのものが追加されていますので、以下にはまだ聞いていない新しい特性があるかもしれません.
推論タイプ(Tagged Unions)
訳者注
Tagged Unionsの翻訳について、多くの資料を調べました.wikiでは、a tagged union、also caled a variant、variant record、discriminated union、disjunion、or sum typeを見つけました.その中でVeriantはVBでよく使われています.C菚対varキーワードの翻訳を参照した後、私はそれを「推断タイプ」に翻訳することにした.
推論のタイプはデーター構造で、連合(C/C++プログラマは必ずこの構造を知っています)に似ています.現在の構造の正確なタイプを識別するためのフィールドがあります.(What is a tagged unionを参照)
推論のタイプはJavaScriptをある方向にF〓、Swiftなどの言語に似ています.そのために、JavaScriptプログラマーたちはきっと喜ぶでしょう.この特性は、連携、相互反発、またはエージェントのタイプを識別することもできます.でも、特性自体は明らかに名称より面白いです.
2つのタイプがあると仮定すると、CircleおよびSquareは、それらのタイプを定義し、Shapeと命名する.
interface Circle {
    kind: "circle";
    radius: number;
}

interface Square {
    kind: "square";
    sideLength: number;
}

type Shape = Circle | Square;
注意CircleおよびSquareには、kindというフィールドがあり、保存されている文字列定数は、タイプを表しています.つまりCirclekindはいつも"circle"です.各タイプには共通のフィールドがありますが、異なる値をマークとして区別します.
Type Script 1.8において、取得面積の関数を書くと、Shapeの各タイプを判断する必要がある.
function getArea(shape: Shape) {
    switch (shape.kind) {
        case "circle":
            //   'Shape'     'Circle'
            let c = shape as Circle;
            return Math.PI * c.radius ** 2;

        case "square":
            //   'Shape'     'Square'
            let sq = shape as Square;
            return sq.sideLength ** 2;
    }
}
各図形のために中間変数を使用してコードを簡潔に見えることが分かりました.
2.0では中間変数は不要です.言語はどのようにkindを通してタイプを見分けますか?だから、コードを少なく書くことができます.
function getArea(shape: Shape) {
    switch (shape.kind) {
        case "circle":
            //    'shape'   'Circle'
            return Math.PI * shape.radius ** 2;

        case "square":
            //    'shape'   'Square'
            return shape.sideLength ** 2;
    }
}
上のコードは完全に正しいです.Type Scriptはフロー制御によって各分岐上の正しいタイプを分析できます.--noImplicitReturnsおよび利用可能になる--strictNullChecksの特性を使用して、これらの検査がより徹底的に行われることを保証することができる.
推論のタイプはJavaScriptという形式のコードをより簡潔で安全にします.例えば、Reduxのようなライブラリはよくこのような形でactionを処理します.独立する
より多くの字面タイプ
1.8が持ってきた文字列の字面タイプは、上で見たように推論タイプを処理するのに役に立ちます.
文字列以外に、もっと多くの種類を提供したいです.2.0では、それぞれの独特なブール、数値、または列挙メンバーが自分のタイプを持つことができます.
type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
let nums: Digit[] = [1, 2, 4, 8];

//   ! '16'    'Digit'!
nums.push(16);
このように推断タイプを使うと、違和感なく素早く対処できます.
interface Success {
    success: true;
    value: T;
}

interface Failure {
    success: false;
    reason: string;
}

type Result = Success | Failure;
ここでのResultタイプは、失敗を表すことができる.成功を表す場合、失敗の原因を示すresonフィールドが含まれている値があります.valueフィールドは、successtrueであるときにのみ有効である.
declare function tryGetNumUsers(): Result;

let result = tryGetNumUsers();
if (result.success === true) {
    // 'result'   'Success'    
    console.log(`Server reported ${result.value} users`);
}
else {
    // 'result'  'Failure'    
    console.error("Error fetching number of users!", result.reason);
}
あなたはすでに気づいたかもしれません.エニュメレート・値は自分のタイプを持つこともできます.
enum ActionType { Append, Erase }

interface AppendAction { 
    type: ActionType.Append;
    text: string;
}

interface EraseAction {
    type: ActionType.Erase;
    numChars: number;
}

function updateText(currentText: string, action: AppendAction | EraseAction) {
    if (action.type === ActionType.Append) {
        // 'action' has type 'AppendAction'
        return currentText + action.text;
    }
    else {
        // 'action' has type 'EraseAction'
        return currentText.slice(0, -action.numChars);
    }
}
Globs文法、包含と排除
訳者注
Globsは直訳して「団块」という意味ですが、これは明らかにGlobs自体の意味より明らかです.だからここでは通訳という言葉がありません.Globsについては、node-blogのREADME.mdにおける説明を参照してください.
tsconfig.jsonファイルを初めて紹介する時、すべてのファイルを手でリストするのは本当につらいです.Type Script 1.6はexcludes構成を導入してこの問題を緩和しました.しかし、これは明らかに足りません.苦痛は、各ファイルのパスを書き終わっても問題が発生します.結果は新しいファイルを排除することを忘れたからです.
Type Script 2.0はついにGlobs文法をサポートし始めました.Globsはパスの中でワイルドカードを使うことを許可します.そうすると、経路を書くのはもう味気ないことではないです.includeおよびexcludeの構成では、Globs構文が使用されてもよい.tsconfig.jsonの例を見てください.
{
    "include": [
        "./src/**/*.ts"
    ],
    "exclude": [
        "./src/tests/**"
    ]
}
Type Script globs文法サポートは以下の通りです.
  • *は、0つ以上の文字にマッチしています.セパレータ(例えば、/または\)は、
  • を除いています.
  • ?は1文字に正確にマッチしています.区切りは
  • を除いています.
  • **/は、任意の階層のサブディレクトリ
  • と一致する.
    これからのこと
    前に述べたように、Type Script 2.0はすぐに発表されましたが、RCバージョンを使うと2.0の新しい特性がコミュニティの発展に大きな役割を果たします.
    もし問題が見つかったら、Githubを通してフィードバックしてください.私たちはあなたが試してくれたフィードバックを聞きたいです.楽しいように