シンボル

ECMAScript 2015以降、symbolnumberstring と同様にプリミティブデータ型です。

symbol の値は Symbol コンストラクターを呼び出すことで作成されます。

ts
let sym1 = Symbol();
let sym2 = Symbol("key"); // optional string key

シンボルは不変であり、ユニークです。

ts
let sym2 = Symbol("key");
let sym3 = Symbol("key");
sym2 === sym3; // false, symbols are unique

文字列と同様に、シンボルはオブジェクトプロパティのキーとして使用できます。

ts
const sym = Symbol();
let obj = {
[sym]: "value",
};
console.log(obj[sym]); // "value"

シンボルは、計算されたプロパティ宣言と組み合わせて、オブジェクトプロパティとクラスメンバーを宣言することもできます。

ts
const getClassNameSymbol = Symbol();
class C {
[getClassNameSymbol]() {
return "C";
}
}
let c = new C();
let className = c[getClassNameSymbol](); // "C"

unique symbol

シンボルをユニークなリテラルとして扱うことを可能にするために、特別な型 unique symbol が用意されています。unique symbolsymbol のサブタイプであり、Symbol() または Symbol.for() の呼び出し、または明示的な型注釈からのみ生成されます。この型は const 宣言および readonly static プロパティでのみ許可されており、特定のユニークシンボルを参照するには、typeof 演算子を使用する必要があります。ユニークシンボルへの各参照は、特定の宣言に結び付けられた完全にユニークな識別子を意味します。

ts
declare const sym1: unique symbol;
 
// sym2 can only be a constant reference.
let sym2: unique symbol = Symbol();
A variable whose type is a 'unique symbol' type must be 'const'.1332A variable whose type is a 'unique symbol' type must be 'const'.
 
// Works - refers to a unique symbol, but its identity is tied to 'sym1'.
let sym3: typeof sym1 = sym1;
 
// Also works.
class C {
static readonly StaticSymbol: unique symbol = Symbol();
}
Try

unique symbol は完全に別個の識別子を持つため、2つの unique symbol 型は互いに代入可能でも比較可能でもありません。

ts
const sym2 = Symbol();
const sym3 = Symbol();
 
if (sym2 === sym3) {
This comparison appears to be unintentional because the types 'typeof sym2' and 'typeof sym3' have no overlap.2367This comparison appears to be unintentional because the types 'typeof sym2' and 'typeof sym3' have no overlap.
// ...
}
Try

既知のシンボル

ユーザー定義のシンボルに加えて、既知の組み込みシンボルがあります。組み込みシンボルは、内部の言語動作を表すために使用されます。

以下は既知のシンボルのリストです。

Symbol.asyncIterator

オブジェクトの非同期イテレーターを返すメソッドで、for await..ofループで使用できます。

Symbol.hasInstance

コンストラクターオブジェクトが、あるオブジェクトを自身のインスタンスとして認識するかどうかを決定するメソッドです。instanceof演算子のセマンティクスによって呼び出されます。

Symbol.isConcatSpreadable

オブジェクトが Array.prototype.concat によって配列要素に平坦化されるべきであることを示すブール値です。

Symbol.iterator

オブジェクトのデフォルトイテレーターを返すメソッドです。for-of文のセマンティクスによって呼び出されます。

Symbol.match

正規表現を文字列と照合する正規表現メソッドです。String.prototype.match メソッドによって呼び出されます。

Symbol.replace

文字列の一致した部分文字列を置き換える正規表現メソッドです。String.prototype.replace メソッドによって呼び出されます。

Symbol.search

正規表現に一致する文字列内のインデックスを返す正規表現メソッドです。String.prototype.search メソッドによって呼び出されます。

Symbol.species

派生オブジェクトの作成に使用されるコンストラクター関数である関数値のプロパティです。

Symbol.split

正規表現に一致するインデックスで文字列を分割する正規表現メソッドです。String.prototype.split メソッドによって呼び出されます。

Symbol.toPrimitive

オブジェクトを対応するプリミティブ値に変換するメソッドです。ToPrimitive 抽象演算によって呼び出されます。

Symbol.toStringTag

オブジェクトのデフォルトの文字列記述の作成に使用される文字列値です。組み込みメソッド Object.prototype.toString によって呼び出されます。

Symbol.unscopables

自身のプロパティ名が、関連付けられたオブジェクトの 'with' 環境バインディングから除外されるプロパティ名であるオブジェクト。

TypeScript ドキュメントはオープンソースプロジェクトです。プルリクエストを送って、これらのページの改善にご協力ください ❤ プルリクエストを送信する

このページの貢献者
MHMohamed Hegazy (52)
OTOrta Therox (15)
GBGabriel Burdeti (2)
MFMartin Fischer (1)
MNMichał Niedziółka (1)
9+

最終更新日: 2024年3月21日