こんばんは@vvakameです。
とかいいつつ、本当はRC変更点とかです。
ついに2系正式版リリースの運びとなり、大変めでたいです。
2.0 Beta変更点から実に2ヶ月半。長い。
変更点まとめ
- Literal Typesの拡大 Number, enum, and boolean literal types
- 今まではstringだけだったものがnumberとbooleanにも拡大
薄味ですね。
次の2つはBetaからの要素でした。
タグ付きUnion型 Discriminated union types
tsconfig.jsonでのglobサポート support globs in tsconfig.json files property (or just file/directory exclusions)
Literal Typesの拡大
String Literal Typesの考え方がbooleanとnumber、Enumにも拡張されました。
これでJavaScriptのprimitiveっぽい型はLiteral Typesで書けるようになりました。
// 1桁の数字!
type Digit = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
function pinNumber(a: Digit, b: Digit, c: Digit, d: Digit) {
}
// 1桁の数字×4 → OK!
pinNumber(1, 2, 3, 4);
// 2桁の数字が混ざってるのでコンパイルエラー
pinNumber(8, 7, 9, 10);
// JavaScript的に false な値の集合なども表現できる
type Falsy = "" | 0 | false | null | undefined;
let f: Falsy = 0;
// EnumもLiteral Types扱い
enum Suit {
Heart, Spade, Club, Diamond,
}
type RedSuit = Suit.Heart | Suit.Diamond;
type BlackSuit = Suit.Spade | Suit.Club;
これだけなので見どころがない…!