MicrosoftのTypeScriptチームは現地時間5日、プログラミング言語TypeScript 3.7がリリースされたことを公式ブログで発表した。

This is a pretty extensive list!(かなり広範なリストです!)と紹介するのは Program ManagerであるDaniel Rosenwasser氏。読書に興味のある人は引き続き、このブログを、手を動かしたい人にはと3.7系新機能をブラウザ上で試せる"TypeScript playground"へのリンクを貼っている。

筆頭に紹介している機能は、"Optional Chaining"。JavaScriptの標準であるECMAScriptへの仕様策定チームへの提案も行われており、5年間に23,000件ものIssues Trackを集めるほど。ECMAScriptへの提案を進めると同時にTypeScript 3.7の一部としてリリースできることを誇りに思うとDaniel Rosenwasser氏は述べている。

Optional Chainingは、新たな?.演算子を用いて未定義のプロパティに遭遇する際に式の実行を停止できる。

let x = foo?.bar.baz();

?.演算子の直前のfooが定義されていれば、foo.bar.baz()が実行されるが、fooが定義されていなければ実行中の処理を止めて、nullやundefinedを返す。これにより多くのコードの省略に役立つとDaniel Rosenwasser氏はBefore/Afterや配列エレメントやコールでの使用も表示している。

// Before
if (foo && foo.bar && foo.bar.baz) {
    // ...
}

// After-ish
if (foo?.bar?.baz) {
    // ...
}

配列のエレメントやコールにも使用できる。

/**
 * Get the first element of the array if we have an array.
 * Otherwise return undefined.
 */
function tryGetFirstElement<T>(arr?: T[]) {
    return arr?.[0];
    // equivalent to
    //   return (arr === null || arr === undefined) ?
    //       undefined :
    //       arr[0];
}



async function makeRequest(url: string, log?: (msg: string) => void) {
    log?.(`Request started at ${new Date().toISOString()}`);
    // roughly equivalent to
    //   if (log != null) {
    //       log(`Request started at ${new Date().toISOString()}`);
    //   }

    const result = (await fetch(url)).json();

    log?.(`Request finished at at ${new Date().toISOString()}`);

    return result;
}

詳しくはTypeScript playgroundへのリンクやtc39(ECMAScript策定チーム)へのプロポーザルを閲覧してほしいとのことだ。公式ブログでは、他13項目をTypeScript 3.7の新機能のトピックスとして解説している。

TypeScriptはMicrosoftが主導して開発するオープンソースのプログラミング言語。JavaScriptのスーパーセットとして、既存のJavaScriptライブラリや拡張された機能を活用できる。