Qual é a palavra reservada “tipo” no TypeScript?

105

Acabei de notar, ao tentar criar uma interface no TypeScript, que "tipo" é uma palavra-chave ou uma palavra reservada. Ao criar a seguinte interface, por exemplo, "tipo" é mostrado em azul no Visual Studio 2013 com TypeScript 1.4:

interface IExampleInterface {
    type: string;
}

Digamos que você tente implementar a interface em uma classe, assim:

class ExampleClass implements IExampleInterface {
    public type: string;

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

Na primeira linha da classe, conforme você digita (desculpe) a palavra "tipo" para implementar a propriedade exigida pela interface, o IntelliSense aparece com "tipo" tendo o mesmo ícone de outras palavras-chave como "tipo" ou "novo "

Eu dei uma olhada e pude encontrar este problema do GitHub que lista "tipo" como uma "palavra reservada de modo estrito" no TypeScript, mas não encontrei nenhuma informação adicional sobre qual é realmente seu propósito.

Eu suspeito que estou tendo um cérebro peido e isso é algo óbvio que eu já deveria saber, mas para que serve a palavra reservada "type" no TypeScript?

Adam Goodwin
fonte
Type Aliaspara dar aos seus tipos um nome semântico: basarat.gitbooks.io/typescript/content/docs/types/…
basarat

Respostas:

129

É usado para "aliases de tipo". Por exemplo:

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

Referência: TypeScript Specification v1.5 (seção 3.9, "Type Aliases", páginas 46 e 47)

Atualização : Agora na seção 3.10 da especificação 1.8 . Obrigado @RandallFlagg pela especificação atualizada e pelo link

Update : TypeScript Handbook , a pesquisa "Type Aliases" pode levar você à seção correspondente.

Jcl
fonte
24
Sim, então era algo óbvio. Acontece que é muito difícil encontrar o que você está procurando ao pesquisar a palavra "tipo" no contexto das linguagens de programação - particularmente quando a linguagem em questão é chamada de "TypeScript". A propósito, dicionários genéricos ainda não existem no TypeScript, certo?
Adam Goodwin
1
Aqui está um caso você precise (para TS 0.9 e superior):
Jcl
Obrigado, acho que já vi esse projeto uma vez quando queria um dicionário, mas no final decidi simplesmente dispensar.
Adam Goodwin
o conceito veio de typedef in ca verifique this studytonight.com/c/typedef.php
Pranoy Sarkar
31

Digite a palavra-chave no texto datilografado:

Em typescript, a palavra-chave type define um apelido para um tipo. Também podemos usar a palavra-chave type para definir os tipos definidos pelo usuário. Isso é melhor explicado por meio de um exemplo:

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;

Você pode compor tipos de tipos escalares ( string, number, etc.), mas também de valores literais como 1ou 'mystring'. Você pode até mesmo compor tipos de outros tipos definidos pelo usuário. Por exemplo, o tipo madnesstem os tipos randome colornele.

Então, quando tentamos tornar uma string literal nosso (e temos IntelliSense em nosso IDE), ele mostra sugestões:

insira a descrição da imagem aqui

Mostra todas as cores, cujo tipo de loucura deriva de ter cor de tipo, 'random' que é derivado de tipo aleatório e, finalmente, a string 'foo'que está no próprio tipo de loucura.

Willem van der Veen
fonte
Qual é a diferença entre tipos definidos pelo usuário e enumeráveis
ORcoder
1
@ORcoder boa pergunta! Eu também quero saber. Uma boa explicação para entendermos!
Merv
onde você declarou as type color = "blue" | "red" | "yellow" | "purple";declarações dentro ou fora da classe?
Lalit Kushwah