TypeScriptでidなどを扱う際に意図せず値を代入することがないように型をつけることができる。
const idKey: unique symbol = Symbol();
type ID = string & { [idKey]: 'IDENTIFIER' };
このようにすることで
ID型 → string型 の代入はできて
string型 → ID型 はできないような型が定義できる。(ID型の実体はただのstring型)
string型をID型として扱うには
function g_ID(x: string): ID {
return x as ID;
}
こうする。
C++とかでよく使われるらしい。
こんな書き方もあった
declare const idKey: unique symbol;
type ID = string & { [idKey]: never };