プリミティブ型とオブジェクト型
プリミティブ型とはオブジェクト型以外の全ての型
数値型や文字型などすべてを含む
数値型について
桁の大きい数字はアンダースコアで区切ることが出来る。
区切っても数値としてちゃんと扱われる。
999_999_999
bigint型
末尾にnをつけて表す
MAX_SAFE_INTEGERを超えるようなでっかい数字がある。
でもこれは数値型では表せないとする。
じゃあ後ろにnってつけとけば、勝手にbigint型で解釈してくれて、エラーにならないね!という話らしい。
ちなみにES2020以降でないとこの書き方は出来ない。
BigInt literals are not available when targeting lower than ES2020.
なので、コンパイルするESのバージョンを指定する。
tsc main.ts --target ES2020
テンプレートリテラル
この名前が良くない。
用は文字列の中に、変数を埋め込めるよっていうこと。
const mojjiretsu = 'いちご';
const temp = `${mojiretsu}はフルーツ`
console.log(temp)
Symbol型
毎回違う値が生成される。
その姿、まるでメモリのアドレスを探すよう。
ただ、乱数を返す関数みたいに使うことはできない。
オブジェクトのプロパティに使う。
と、これじゃまるで意味が分からない。
要は重複させたくないオブジェクトのプロパティに使う
例えばこんなオブジェクトがあって
間違ってコードのどこかでオブジェクトのidを上書きしてしまうかもしれない。
そんなときにsymbol型でidという名前を付けてあげれば上書きされることはない。
何故なら、アプリ内で固有の値だから。
決まった場所にある箱じゃなくて、毎回ランダムに移動してる箱。
ゆえにその実態を誰もつかむことが出来ない。
要は上書きされたくないよ~とかそういう時に使うはず。(間違ってたらすいません)
const id = Symbol();
const obj = {
id: 1,
id: 2,
id: 3,
id: 4,
[id]: 0001, // idって名前だけど共存できるし、既存のidを上書きすることもない
}
型注釈
この型しか入れられないよ、というルール
let moji :string; // 型は小文字
列挙型
定数をまとめて宣言してオブジェクトみたいに扱う。
キーワードはenum
enum test { // test= {}みたいに=はいらない
member1 = 'maria',
member2 = 'mary',
member3 = 'silent hill'
}
console.log(test.member3);
ちなみにメンバーの値は省略出来て、そうすると上から番号が0から割り当てられる。
この列挙型の便利なところは、メンバーの値が変わっても、
呼び出すメンバー名は変わらないということ。
まぁ、そのへんの変数と同じ。
enum Silent { // test= {}みたいに=はいらない
member1 = 'maria',
member2 = 'mary',
member3 = 'james' //ここの中身が変わっても呼び出し方は同じ
}
console.log(test.member3);
ユニオン型
これか、これのどっちかの型ならOK、とする。
const union: string | number
ユニオン型と列挙型の応用
ユニオン型は「いずれかの型」のみ入れられる型。
列挙型の中のメンバーの値のいずれかのみを代入できる変数を作りたいってときがいつか来るかもしれない。来ないかもしれない
リテラル型
ある具体的な値をそのまま型として使う。
要は、その具体的な値以外入れられないよ。
let test: 'ペルソナ' | true | 1;
// このどれかの値しか代入できない
型エイリアス
ここまで好き勝手に型を作ってきた。
ユニオン型、リテラル型、列挙型みたいな。
いやいや、もうわけわからんからstringとかintみたいなプリミティブだけにしてくれ、
と思う。
だが、ここでさらに応用が行われてしまう。
ここまで好き勝手作ってきた型に、名前を付けて、今後も便利に使ってやろうという意志が芽生える。
キーワードは type
type Persona = 'アルセーヌ' | 'イザナミ';
let main: Persona = 'ジライヤ' //NG
let main: Persona = 'アルセーヌ' //OK
type Num = number | bigint;
// こんな風にtype型には:で型を定義するんじゃなくて、型を代入する。何故?
keyof
オブジェクトのキーをリテラル型(この具体的な値なら代入できるよ)にして返す
あるオブジェクトのキーと同じ名前のみを定義できるユニオン型を返す
if文
よくある書き方まんまなので割愛。
三項演算子
条件式 ? trueのとき : falseのとき
try catch
これもありきたり。
ErrorオブジェクトをExceptionの代わりに呼び出す。
急にeって出てくるのはErrorオブジェクトに名前が付いただけ。
try {
throw new Error('エラーメッセージ');
} catch (e) {
console.log(e)
}