5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TypeScript Handbook を読む (11. Symbols)

Last updated at Posted at 2017-04-12

TypeScript Handbook を読み進めていく第十一回目。

  1. Basic Types
  2. Variable Declarations
  3. Interfaces
  4. Classes
  5. Functions
  6. Generics
  7. Enums
  8. Type Inference
  9. Type Compatibility
  10. Advanced Types
  11. Symbols (今ココ)
  12. Iterators and Generators
  13. Modules
  14. Namespaces
  15. Namespaces and Modules
  16. Module Resolution
  17. Declaration Merging
  18. JSX
  19. Decorators
  20. Mixins
  21. Triple-Slash Directives
  22. Type Checking JavaScript Files

Symbols

原文

Introduction

ECMAScript 2015 からプリミティブ型に symbol が追加されました。
symbol 型の値は Symbol コンストラクタを呼ぶことで作成します。

TypeScript
let sym1 = Symbol();

let sym2 = Symbol("key"); // 文字列キーは任意
JavaScrypt
var sym1 = Symbol();

var sym2 = Symbol("key"); // 文字列キーは任意

別に TypeScript が他の型に変換するわけではないのね

シンボルは変更不可で、かつ、一意です。

TypeScript
let sym2 = Symbol("key");
let sym3 = Symbol("key");

sym2 === sym3; // false、シンボルは常に一意

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

TypeScript
let sym = Symbol();

let obj = {
    [sym]: "value"
};

console.log(obj[sym]); // "value"

オブジェクトのプロパティにする場合は [] で囲むのかな?

また、計算されたプロパティとして使用することも可能です。

TypeScript
const getClassNameSymbol = Symbol();

class C {
    [getClassNameSymbol](){
       return "C";
    }
}

let c = new C();
let className = c[getClassNameSymbol](); // "C"

c[getClassNameSymbol]function が返るから、それを呼び出しているだけ

Well-known Symbols

TypeScript の内部的な振る舞いを制御するためのシンボルがいくつか用意されています。

いろいろ値を変更して振る舞いをカスタマイズできるようだけど、正直なところ、これらの値を変更することはまずないだろう

Symbol.hasInstance

コンストラクタオブジェクトのインスタンスとしてオブジェクトを認識するかどうかを判定する関数。
instanceof 演算子で使用されます。

MDN

Symbol.isConcatSpreadable

Array.prototype.concat を呼んだ時に、オブジェクトを配列として展開するかどうかを示す真偽値。

MDN

Symbol.iterator

オブジェクトのデフォルトイテレータを返却する関数。
for ... of で使用されます。

MDN

Symbol.match

文字列に対し、正規表現でのマッチングを行う正規表現関数。
String.prototype.match で使用されます。

MDN

Symbol.replace

部分文字列の置換を行う正規表現関数。
String.prototype.replace で使用されます。

MDN

Symbol.search

正規表現に一致する部分のインデックスを返却する正規表現関数。
String.prototype.search で使用されます。

MDN

Symbol.species

派生クラスを作成するためのコンストラクタ関数を指定する関数。

MDN

Symbol.split

正規表現に一致する部分で文字列を分割する正規表現関数。
String.prototype.split で使用されます。

MDN

Symbol.toPrimitive

オブジェクトを対応するプリミティブ型に変換する関数。
ToPrimitive 演算子で使用されます。

MDN

Symbol.toStringTag

オブジェクトのデフォルトの文字列表現を作成する際に使用される文字列。
Object.prototype.toString で使用されます。

MDN

Symbol.unscopables

with 構文を使用した時にバインド対象外とするプロパティを指定するオブジェクト。

MDN

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?