型パズルで学ぶTypeScriptの型
2025/02/06 追記 こちらの記事はZennへ移行しました。
井上 輝義
学生時代は競技プログラミングをしていました。(highest:2079 ほぼ引退)
現在は勤務時間以外は麻雀を打つか観戦をしています。
1. 筆者は学生時代競技プログラミングにそれなりに取り組んでいたため、C++をよく書いていました。また、Javaはアルバイトで書いていました。
2. なぜ文字列を選んだかということですが、Template Literal Typesという新しめの機能を試すのにちょうどよいのと、比較的に何が起きているかがわかりやすいと思ったためです。
3. TypeScriptを完全に理解している人から見れば微々たる程度の知識しかありません。
4. 基礎知識の勉強にはuyhoさんの入門記事(https://qiita.com/uhyo/items/e2fdef2d3236b9bfe74a)を読むとよいでしょう。
5. 対してIntersection型というものも存在します。これは A & Bと書き、AでもBでもあるような型を指します。number & stringなどはほとんど意味をなしませんが、オブジェクト型を考えると結構有用です。
6. できるだけ前から区切って条件を満たせばの区切り方を採用する、というイメージです。
7. タプル型についてはこの記事(https://zenn.dev/luvmini511/articles/d89b3ad241e544)を読むとよいでしょう。
8. ちなみに、数値型の演算(2型+3型とか)というのは定義されておらず、その機能を実現するためには現状タプル型に頼るしかありません。型での数値演算は実装量が多く、typechallangesでは難度の高い問題として紹介されています。型で数値を扱う方法の例についてはこの記事(https://techracho.bpsinc.jp/yoshi/2020_09_04/97108)を見るとよいでしょう。
9. ヒント : 文字列を半分で区切って...と考えてしまうと、数値演算が必要になり、これは前述の通り面倒です。問題で示した平方の定義を満たしているかを確認するためには、文字列を前から一文字ずつ区切りながらどうすればよいでしょうか?