BLOGサブスレッドの日常

2023.08.19

勉強会でTypeScriptの話をしたけど、紹介できていなかった話3選

s.kono

むおおおお!
6月29日(木)に弊社で勉強会を開催しまして、TypeScriptの話をしました。
(結局ブログとしてはまだ紹介できてないですのですがm( )m)

その時に、ネタとしては仕入れたのですが、面白いのに枠的に話せなかったことがいくつかあったので、ちょっと紹介したいと思います。

短縮代入演算子 &&=, ||=, ??= について

https://devblogs.microsoft.com/typescript/announcing-typescript-4-0/#short-circuiting-assignment-operators

TypeScript 4.0 で、 &&=, ||=, ??= という3つの短縮代入演算子が追加されました。

a = a && b; // a &&= b と同じ
a = a || b; // a ||= b と同じ
a = a ?? b; // a ??= b と同じ

以下のように使います。

let values: string[];

// Before
(values ?? (values = [])).push("hello");

// After
(values ??= []).push("hello");

+=などの仲間で、代入も一緒にしてくれる、便利な文法です。

ただ、パッと見ですが…結構便利そうだな…と思う反面、誤読を誘発しそうだな、と個人的には思っています。
見やすいコードを心がけたい…という気持ちです。

ちなみにこれら演算子は、既にJavaScriptでも使えます。
例) null合体代入演算子 https://caniuse.com/?search=%3F%3F%3D

staticブロック

https://devblogs.microsoft.com/typescript/announcing-typescript-4-4/#static-blocks

TypeScript 4.4以降、クラスの中にstaticブロックが書けるようになりました。

class Foo {
    static count = 0;

    // This is a static block:
    static {
        if (someCondition()) {
            Foo.count++;
        }
    }
}

僕の印象「Javaだ」

ちなみにこれも既にJavaScriptで使えます。

https://caniuse.com/?search=static%20block

TypeScriptで super() の前にコードを書けるようにするPRが3年の時を経てマージ、祝福の嵐を受けていた話

https://devblogs.microsoft.com/typescript/announcing-typescript-4-6/#code-before-super

TypeScriptでクラスを書いた時、クラスを継承しており、コンストラクターの中でsuper()を書いた場合、その前にコードを書くことは許されませんでした。
これを緩和するPRが、TypeScript 4.6でマージされました。

https://github.com/microsoft/TypeScript/pull/29374

このPR、マージされるまでに時間がかかりました。 実に3年
その間、PRの作者は様々な質問にも答え続け、PRがマージされる所まで頑張ったようです。

あまりに長い時間頑張ったので、作者は3周年ということでケーキを購入。
PRに貼って、様々な人から祝福のリアクションをいただいたようです。

ブルックリンのブッシュウィックというところにあるケーキ屋さんで購入されたようですね。
ブルックリンといえばスーパーマリオが居る所なので、旬的にも勉強会ネタに入れたかったのですが、テーマと時間的に入れる場所がなく、叶わずでした。

また、作者はESLintのメンテナの方のようです。すごい方ですね。

まとめ

ぶっちゃけ最後のPRのオチが面白かったので紹介したかっただけなのですが。
TypeScriptの文法は、覚えれば覚えるほど表現力が上がるので、
ぜひTypeScriptの進化も追ってみてください!

この記事を書いた人

s.kono