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を使うというイメージができた。
(合っているかはわからないが。。。)
(合っていると思っている。)
元の記事の人、ありがとうございます!