#TypeScript ## 事象 以下のようなコードでエラーになる。[[IntelliJ IDEA]]でエラーにならない。 ```ts declare const _brand: unique symbol; export class SpotId extends PrimitiveValueObject<string> { private [_brand]: void; // ... } ``` ## 原因 `declare const _brand: unique symbol;` は宣言のためRuntime時に削除される。一方 `[_brand]` はRuntime時も残るためRuntime Errorになる。 ## 対策 `declare`ではなく`Symbol()`で値を代入する。 ```ts const _brand = Symbol(); export class SpotId extends PrimitiveValueObject<string> { private [_brand]: void; // ... } ``` Runtimeコードにゴミが残ってしまうのが難点。