typeが逆だったので直した。susisuくんにいいこと教えてもらったので追記した。Uという記法を使うと,TとUの両方を満たす型を生成できる。動的に型を生成できるので,まさに型計算という感じで面白い。U型ができる,という具合。Scalaよりもこういうところに力を入れているっぽい。};もちろん,TとUとが矛盾するような場合は型を作ることができない。実際は作れるのだが,その部分の型はneverになるので,値を入れることができない。compile!値の集合としての型これは面白くて,取れる値の共通集合を探そうとして,結局空になってしまったということを意味している。TypeScriptでは,取れる値のない型,つまりその型の値の集合が空集合(\(\emptyset\))になるような型はneverとして扱われている。型とは,値の集合である,というふうに考えるとわかりやすい,というか実際そうである。全ての真偽値(trueかfalseしかない)の集合がbooleanであり,全ての整数の集合がintegerである。無限集合である一方でコンピュータは有限桁しか扱えないので,それを基準にした有限集合をintegerとしている。ちなみに,型は値の集合である,というところからいろいろなところが見えてくる。U\)を求めたというふうに考えられる。このため&記号を使っているのだと思う。TとUとが両方持っているbについて,共通集合を求めようとしたところ,numberとbooleanとでは共通の要素がないから,空になってしまったのだ。共通の要素がある場合について考える。以下の例では,Bは"x"か"y"か"z"のどれかを取る型であり,B2は単なるstringである。|については次節で見ていく。Uのbの型はBになる。TypesTもしくはUという型も考えることができる。"z"も,xかyかzのどれかを取るという意味である。U\)となるような型を生成している。これはScalaでおなじみのEitherなので,はあそうですねという感じだった。任意個をくっつけられるEither。共通部分だけ残す演算?ところで,こういう型を考えることはできないだろうか。}を生成するものである。ここからbだけを持つ型を作れないだろうか。};ここでさっきの集合の話が登場する。}は,一見TやUの部分に見えるが,TもUも,b以外のフィールドを持つことではじめてTやUになるのであって,実はVとのかかわりあいがない。言い換えると,Vは別段TやUの部分型ではなさそう。いうのもTやUがとりうる値の集合に,bしかフィールドを持たない型は登場しないからだ。aやbが省略可能なら作ることもできる。};しかし元の型をnullableにせずともこういう操作ができないだろうか。需要があるのか知らないが。VはTやUの部分型ではない(多分。識者の知見をお待ちしています)ので,あまり簡単ではなさそう。追記id:susisuがいいこと教えてくれました。Typesで遊んだTweet関連記事2020-01-10シェルスクリプトで環境変数の中身を壊すことなくファイルに保存する★追記があります。週間)Web開発者です。Lisp/Perl/Goまわりの話題が多いです。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。