1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TypeScriptでのSymbolとは?

Last updated at Posted at 2023-08-03

TypeScriptでのSymbolについて

TSの勉強中にSymbolの方についてのイメージがわかなかったので記事漁っていたら、以下の記事がわかりやすかったのでほぼ真似の形でメモとして残す。

シグネチャーが同じで型が違う場合

class Car {
    id: string;
    name: string
}

class Human {
    id: string;
    name: string
}

function callHuman(human: Human) {
    console.log(human);
}

const car = new car("1", "GTR");

callHuman(car); // Not Error

上記のように型が違ってもシグネチャー一緒なら受け付けてしまう。
よくない。。。

シグネチャーが異なり型が違う場合

先ほどは型は違っていましたが、シグネチャーは一緒でした。
そうした場合、エラーが起こらず動いてしまう。
そのためSymbolを用いてエラー出した。
以下のように記述することでSymbolを用いて先ほどの問題を解決できるらしい。

const carType = Symbol();

class Car {
    [carType]: any;
    id: string;
    name: string
}

const humanType = Symbol()

class Human {
    [humanType]: any;
    id: string;
    name: string
}

function callHuman(human: Human) {
    console.log(human);
}

const car = new car("1", "GTR");

callHuman(car); // Error

まとめ

(ポイント)

  • 型が違う
  • シグネチャーが同じ

上記の2点の場合、エラーが起きて欲しいのに起きないことがあるため、そのバグを潰すためにSymbolを使うというイメージができた。
(合っているかはわからないが。。。)
(合っていると思っている。)


元の記事の人、ありがとうございます!

1
2
2

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?