0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

TypeScript入門②型~Error

Last updated at Posted at 2024-11-27

プリミティブ型とオブジェクト型

プリミティブ型とはオブジェクト型以外の全ての型
数値型や文字型などすべてを含む

数値型について

桁の大きい数字はアンダースコアで区切ることが出来る。
区切っても数値としてちゃんと扱われる。

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)
}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?