BLOGサブスレッドの日常
2023.08.19
勉強会でTypeScriptの話をしたけど、紹介できていなかった話3選
s.kono
むおおおお!
6月29日(木)に弊社で勉強会を開催しまして、TypeScriptの話をしました。
(結局ブログとしてはまだ紹介できてないですのですがm( )m)
その時に、ネタとしては仕入れたのですが、面白いのに枠的に話せなかったことがいくつかあったので、ちょっと紹介したいと思います。
短縮代入演算子 &&=, ||=, ??= について
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に貼って、様々な人から祝福のリアクションをいただいたようです。
My longest-living #TypeScript pull request is now three years old. I got it a birthday cake to celebrate! 🎂 🥳https://t.co/yAdPXpM6T6
— Josh Goldberg 💖 (@JoshuaKGoldberg) January 13, 2022
bump for PR review please 😁 pic.twitter.com/8PCwkR6uP2
ブルックリンのブッシュウィックというところにあるケーキ屋さんで購入されたようですね。
ブルックリンといえばスーパーマリオが居る所なので、旬的にも勉強会ネタに入れたかったのですが、テーマと時間的に入れる場所がなく、叶わずでした。
また、作者はESLintのメンテナの方のようです。すごい方ですね。
まとめ
ぶっちゃけ最後のPRのオチが面白かったので紹介したかっただけなのですが。
TypeScriptの文法は、覚えれば覚えるほど表現力が上がるので、
ぜひTypeScriptの進化も追ってみてください!
この記事を書いた人
s.kono
