TypeScript2.7がリリース

Blog Single

TypeScript2.7が現地時間2月1日にリリースされました。
主な変更点は以下となります。

  • Stricter class property checks
  • Definite assignment assertions
  • Easier ECMAScript module interoperability
  • unique symbol types and const-named properties
  • Cleaner output in –watch mode
  • Prettier –pretty output
  • Numeric Separators
  • Fixed Length Tuples
  • in operator narrowing and accurate instanceof
  • Smarter object literal inference

今回のリリースで個人的に注目なのは

  • Stricter class property checks
  • Easier ECMAScript module interoperability
  • Numeric Separators
  • in operator narrowing and accurate instanceof

の4点

Stricter class property checks

簡単に言うと厳格モード。

「–strictPropertyInitialization」を追加することによって、クラスの各インスタンスプロパティがコンストラクタ本体に設定されるか、プロパティ初期化子によって設定しないとエラーになります。

例文は以下

class C {
    foo: number;
    bar = "hello";
    baz: boolean;
//  ~~~
//  Error! Property 'baz' has no initializer and is not assigned directly in the constructor.
    constructor() {
        this.foo = 42;
    }
}

Easier ECMAScript module interoperability

ES2015でECMAScriptモジュールが標準化される前は、JavaScriptエコシステムにはいくつかの異なるモジュール形式があったことは知っている人もいるはず。
ES2015から標準化されたはいいが、ここで問題が起こりました。
それは「レガシー」な資産、もといレガシーなモジュール形式との相互運用ですね。

実際、過去のモジュールを使おうとするとTypescriptの型定義ファイルを持ってくる必要がありました。
それが以下のようにあたかも元からあったモジュールの様な振る舞いで呼び出すことが可能になります。

import express from "express";

let app = express();

Numeric Separators

これはまぁカンマやドット区切りの部分に「_」をつけることによって見やすくなった形です。

今まで

const milion = 1000000;

typescript2.7から

const milion = 1_000_000;

うむ、可読性がアップ

in operator narrowing and accurate instanceof

今までJSの型チェックは「instanceof」を使っていました。

function MyClass() {}
var obj = new MyClass();
obj instanceof MyClass; // true
obj instanceof Array;   // false

それが以下の様にinでチェックが行えるようになります。
スマート。

interface A { a: number };
interface B { b: string };

function foo(x: A | B) {
    if ("a" in x) {
        return x.a;
    }
    return x.b;
}

まとめ

と、まぁ今回は結構大きな変更がありました。
レガシー資産を気兼ねなく使える様になるのは大きい。

詳細は以下ページに書いてあるのでご覧あれ!
ちなみに全部英語ダヨ

Announcing TypeScript 2.7

Posted by YamamotoDaiki
映画をこよなく愛するFOX HOUND古株エンジニア。 PHPから始まり今ではnodeJSやらSwift、Solidityなど色々な言語に触る機会が多し。

Other Posts: