常に一意な値を生成するプリミティブ型。衝突しないプロパティキーとして使う
const id = Symbol('id');
const id2 = Symbol('id');
id === id2; // false(常に一意)
const KEY = Symbol('key');
const obj: Record<symbol,string> = {};
obj[KEY] = 'private-ish'; // for...inに列挙されない
// Well-known Symbols
class MyArr {
[Symbol.iterator]() { /* カスタムイテレータ */ }
}Symbolキーはfor...inやObject.keys()に列挙されないため「半プライベート」なプロパティとして使われる。グローバル共有にはSymbol.for()を使う。