🙃

TypeScriptにおけるプリミティブ型、型変換、演算子メモ

2025/01/13に公開

自分が備忘したいことのメモ

プリミティブ型

文字列リテラル

ダブルクオート、シングルクオート、バッククオートで囲んで表す方法がある。
ダブル・シングルクオートは文字列リテラルと呼ばれ、両者に差異はなく、Javaと同様に以下のような使われ方をする。

const var1: string = "Hello";
const var2: string = 'Hello';
console.log(var1 + "world");
//HelloWorldと出力される。

バッククオートに関してはテンプレートリテラルと呼ばれる。
上記文字列リテラルと異なり、改行が可能、式を${式}という形で文字列に埋め込むことができる。

console.log(`${var1}World`);
//HelloWorldと出力される。

型変換

算術演算子 "+"

演算子を構成する要素のことをオペランドと言う。
+のオペランドの片方がstring型の場合、+式の返り値もstring型となる。

プリミティブ型の関数を使用する

プリミティブ型の型名の関数を変換したいリテラルの引数に与えると、型変換が可能。

const var3: string = String(1234);
const var4: number = Number(string);

注意点としては、Number関数の引数が文字列やundefinedだった場合には返り値はNaNとなる。
また真偽値への型変換については、返り値が特殊なため注意。(TypeScript入門p46参照)

演算子

算術演算子 - 二項演算子

二項演算子のオペランドはnumber型やbigint型でなければならない。

算術演算子 - 単項演算子

+,-については、値の正負を反対にする。
またこれらの演算子は数値以外をオペランドに取ることも可能で、その場合値を数値に変換してくれる。
そのため+については、上記のString関数での型変換ではなくこちらが使用されることもある。

比較演算子

一致判定を実施する演算子は==,!=,===,!===の四つがある。
===,!===を主に使用するべきで、両者はオペランドの型までをチェックして一致判定が可能。
一方==,!=については、型変換を自動で実施してしまうため、厳密な判定には不適。

const var5: string = `123`;
console.log(var5 === 123);
//falseと表示される
console.log(var5 == 123);
//trueと表示される

ただし、x==nullについては、上記の非厳密さからx === null and x === undefinedという意味となり記述が楽なため使用されることがある。
またオペランドの片方に数値型のNaNが入っていた場合、必ず返り値はfalseとなる。
x === NaNもfalseが返るため、NaNかどうか判定したければNumber.isNaN関数を使用する。

論理演算子

論理演算子&&,||,!はオペランドにどの型でも使うことができる。
その際、オペランドは真偽値に変換されてから評価される。
注意したい用法は&&,||の使用法。
&&の場合、x && yでxがtrueの場合yを返し、falseの場合xを返す。
||の場合、x && yでxがtrueの場合xを返し、falseの場合yを返す。
この際返り値はオペランドの型による。左オペランドと右オペランドが異なる型でも問題ない。
また短絡評価といい、これらの演算子で左オペランドが返される際、右オペランドは処理すらされない。

const ev1: String = "test";
const ev2: String = "";
console.log(`${ev1 && ev2}aaaaaa`);
//aaaaaaと出力される
console.log(`${ev2 && ev1}aaaaaa`);
//aaaaaaと出力される
console.log(`${ev1 || ev2}aaaaaa`);
//testaaaaaaと出力される
console.log(`${ev2 || ev1}aaaaaa`);
//testaaaaaaと出力される

もう一つ??という論理演算子がある。
x ?? yという形式で使用し、xがnull or undefinedだった場合にyを返し、それ以外はxを返す。
&&や||と似ているが、これらが空文字や0をfalseとしてしまうのに対し、??はそうではないため、こちらの方が範囲が限定される。

代入演算子

代入演算子である=は返り値を取る。
副作用(返り値を返す以外に発生する効果)は代入演算子を例にするとわかりやすいかもしれない。

Discussion