mosya<TC> - 数値型を絶対値に変換する型を作ろう
この記事はmosya<TC>の問題の一つであるAbsolute型の解説になります。
問題
srting, number または bigint を受け取り、正の数を出力する Absolute
型を実装します。
例えば以下のようなコードを満たすように実装しましょう。
type Test = -100;
type Result = Absolute<Test>; // expected to be "100"
解答例
type Absolute<
T extends number | string | bigint
> = `${T}` extends `-${infer U}`
? U
: `${T}`;
まず、T
がnumber | string | bigint
であることを条件として、T extends number | string | bigint
という条件を指定します。
次に、${T}
のように文字列リテラルを使い文字列に変換します。その上で、その文字列が先頭に-
があるかどうかを判定します。
-
がある場合は、T
は負の数なので、T
から-
を取り除いたU
を返します。
-
がない場合は、T
は正の数なので、そのままT
を返します。
Authored by
Godai@steelydylan
Webサービスを作るのが好きなWebエンジニア。子供が産まれたことをきっかけに独立し法人化。サービス開発が大好き。
好きな言語はTypeScript。