Símbolo en TypeScript (Symbol)

La versión ECMAScript 2015 de JavaScript agregó un nuevo tipo de datos primitivo llamado symbol, que es un tipo primitivo como type number y type string. Consulte la documentación Symbol para obtener un desglose de estos símbolos. Los valores de tipo symbol se crean llamando al constructor ‎Symbol()‎:

Tabla de contenidos

let sym1 = Symbol();

let sym2 = Symbol("key");  // clave de texto opcional

Los simbolos son únicos e inmutables:

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

sym2 === sym3; // false, los símbolos son únicos incluso si se crean con la misma clave

Los símbolos se pueden usar como claves de propiedad para objetos y cadenas:

let sym = Symbol();

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

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

Los símbolos también se pueden combinar con declaraciones de propiedades calculadas para declarar propiedades de objetos y elementos de clases:

const getClassNameSymbol = Symbol();

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

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

Símbolos conocidos

Además de los códigos definidos por el programador, también existen códigos especiales predefinidos llamados códigos conocidos(Well-known Symbols). Estos símbolos en línea se utilizan para representar cómo funcionan internamente algunas partes del lenguaje. Aquí hay una lista de códigos conocidos (consulte la documentación del código para obtener más información):

Symbol.hasInstance

Una función que determina si el constructor reconoce un objeto como un objeto del que se deriva. Se utiliza desde el parámetro instanceof. El comportamiento del parámetro instanceof se puede personalizar con este código.

Symbol.isConcatSpreadable

Un valor booleano que especifica si un objeto debe «aplanarse» en elementos de matriz. Utiliza este código de la función  Array.prototype.concat()‎.

Symbol.iterator

Una función que devuelve el iterador predeterminado de un objeto determinado, que se utiliza desde un bucle for...of.

Symbol.match

Una función que coincide con una cadena y también se usa para determinar si el objeto se puede usar como una expresión regular. Se utiliza desde la función String.prototype.match()‎.

Symbol.replace

Este conocido símbolo especifica la función que reemplazará parte de un string. Esta función será llamada desde la función String.prototype.replace()‎.

Este conocido símbolo especifica la función que devolverá un índice dentro de un string de texto que coincida con la expresión regular. Esta función será llamada desde la función String.prototype.search()‎.

Symbol.species

Una función utilizada para crear objetos derivados.

Symbol.split

Este conocido símbolo especifica la función que dividirá una cadena de texto en índices que coincidan con una expresión regular. Esta función será llamada desde la función String.prototype.split()‎.

Symbol.toPrimitive

Una función utilizada para convertir un objeto a un valor inicial apropiado. Llamado desde el proceso abstracto ToPrimitive.

Symbol.toStringTag

Una cadena utilizada en la descripción predeterminada del objeto, y este código se utiliza desde el Object.prototype.toString()‎.

Symbol.unscopables

Un objeto Objectcuyos nombres de propiedad son nombres de propiedad que están excluidos del entorno withde asociaciones de objetos relacionados.


Recursos del Artículo


Deja un comentario