¿Qué es la palabra reservada "tipo" en TypeScript?


105

Al intentar crear una interfaz en TypeScript, noté que "tipo" es una palabra clave o una palabra reservada. Al crear la siguiente interfaz, por ejemplo, "tipo" se muestra en azul en Visual Studio 2013 con TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Digamos que luego intenta implementar la interfaz en una clase, así:

class ExampleClass implements IExampleInterface {
    public type: string;

    constructor() {
        this.type = "Example";
    }
}

En la primera línea de la clase, mientras escribe (lo siento) la palabra "tipo" para implementar la propiedad requerida por la interfaz, IntelliSense aparece con "tipo" que tiene el mismo icono que otras palabras clave como "typeof" o "new ".

Eché un vistazo y pude encontrar este problema de GitHub que enumera "tipo" como una "palabra reservada en modo estricto" en TypeScript, pero no he encontrado más información sobre cuál es realmente su propósito.

Sospecho que estoy teniendo un pedo cerebral y esto es algo obvio que ya debería saber, pero ¿para qué es la palabra reservada "tipo" en TypeScript?


Type Aliaspara dar a sus tipos un nombre semántico: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Respuestas:


129

Se utiliza para "alias de tipo". Por ejemplo:

type StringOrNumber = string | number;
type DictionaryOfStringAndPerson = Dictionary<string, Person>;

Referencia: Especificación de TypeScript v1.5 (sección 3.9, "Alias ​​de tipo", páginas 46 y 47)

Actualización : ahora en la sección 3.10 de la especificación 1.8 . Gracias @RandallFlagg por la especificación y el enlace actualizados

Actualización : Manual de TypeScript , la búsqueda "Alias ​​de tipo" puede llevarlo a la sección correspondiente.


24
Sí, entonces era algo obvio. Resulta que es bastante difícil encontrar lo que estás buscando cuando buscas la palabra "tipo" en el contexto de los lenguajes de programación, particularmente cuando el lenguaje en cuestión se llama "TypeScript". Por cierto, los diccionarios genéricos todavía no existen en TypeScript, ¿verdad?
Adam Goodwin

1
Aquí hay uno si lo necesita (para TS 0.9 y superior):
Jcl

Gracias, creo que vi ese proyecto una vez antes cuando quería un diccionario, pero al final decidí prescindir de él.
Adam Goodwin

el concepto vino de typedef en ca, revise este studytonight.com/c/typedef.php
Pranoy Sarkar

31

Escriba la palabra clave en mecanografiado:

En mecanografiado, la palabra clave type define un alias para un tipo. También podemos usar la palabra clave type para definir tipos definidos por el usuario. Esto se explica mejor con un ejemplo:

type Age = number | string;    // pipe means number OR string
type color = "blue" | "red" | "yellow" | "purple";
type random = 1 | 2 | 'random' | boolean;

// random and color refer to user defined types, so type madness can contain anything which
// within these types + the number value 3 and string value 'foo'
type madness = random | 3 | 'foo' | color;  

type error = Error | null;
type callBack = (err: error, res: color) => random;

Puede componer tipos de tipos escalares ( string, number, etc.), sino también de los valores literales como 1o 'mystring'. Incluso puede componer tipos de otros tipos definidos por el usuario. Por ejemplo escribamadness tiene los tipos randomy coloren él.

Luego, cuando intentamos hacer una cadena literal nuestra (y tenemos IntelliSense en nuestro IDE), muestra sugerencias:

ingrese la descripción de la imagen aquí

Muestra todos los colores, cuyo tipo de locura se deriva de tener el tipo de color, 'aleatorio' que se deriva del tipo aleatorio y, finalmente, la cadena 'foo'que está en el tipo de locura en sí.


¿Cuál es la diferencia entre los tipos definidos por el usuario y los enumerables?
ORcoder

1
@ORcoder ¡buena pregunta! Yo también quiero saber. ¡Una buena explicación para que la entendamos!
Merv

¿Dónde ha declarado las type color = "blue" | "red" | "yellow" | "purple";declaraciones dentro o fuera de la clase?
Lalit Kushwah
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.