Introdução ao uso básico de ts

Brevemente

No artigo anterior, apresentamos brevemente a construção do ambiente TypeScript. Por melhor que seja ts, por mais poderoso que seja, ele também requer javascript. Portanto, o pré-requisito para aprender ts é conhecer js.
ts fornece verificação estática de tipo.Como é usado?A seguir apresentaremos o uso de cada tipo básico, um por um.

vamos cachorro

Tipos básicos do TypeScipt

valor booleano

O tipo de dado mais básico é o valor verdadeiro/falso simples, chamado de booleano em JavaScript e TypeScript (e também em outras linguagens).

let isTure: boolean = false
isTure = 'zsl'
console.log(isTure);

Ao atribuir um valor diferente de falso ou verdadeiro ao valor booleano, uma grande onda vermelha aparecerá no editor e um prompt detalhado aparecerá quando o mouse for movido sobre ela.
insira a descrição da imagem aqui
Se atribuirmos nulo e indefinido, nenhum erro será reportado, pois por padrão o TypeScript trata nulo e indefinido como pertencentes a qualquer tipo. Se não quisermos que isso aconteça, precisamos habilitar strictNullChecks
no arquivo de configuração.Após habilitar, trate null como tipo nulo e indefinido como tipo indefinido.
insira a descrição da imagem aqui

Número tipo de número

Como o JavaScript, todos os números no TypeScript são números de ponto flutuante. O tipo desses números de ponto flutuante é número. Além de oferecer suporte a literais decimais e hexadecimais, o TypeScript também oferece suporte a literais binários e octais introduzidos no ECMAScript 2015.
O tipo de número é um número de ponto flutuante de precisão dupla de 64 bits, que é propenso ao problema de falta de precisão, como 0,1+0,2 != 0,3; é também a razão pela qual às vezes o valor é adicionado e o resultado tem muitas casas decimais.
insira a descrição da imagem aqui

corda

Use string para representar o tipo de dados de texto. Assim como o JavaScript, você pode usar aspas duplas ( " ) ou aspas simples ( ' ) para denotar strings.

//  默认进行类型推断
let str = 'zsk'
let strs = new String('zsk')
//  或
let str2: string = 'zsk'





str = 0
console.log(str);
console.log(strs);
console.log(str2);

Embora str = 0 não esteja de acordo com a especificação typescript, você ainda pode ter sucesso se compilá-lo. Podemos configurar noEmitOnError como true e a compilação falha quando o arquivo ts relata um erro.

variedade

TypeScript pode manipular elementos de array como JavaScript. Existem duas maneiras de definir matrizes. Na primeira, [] pode ser seguido do tipo do elemento, indicando um array composto por elementos deste tipo:

//	表示数字数组
let list: number[] = [1, 2, 3];

A segunda maneira é usar genéricos de matriz, Array<tipo de elemento>:

let list: Array<number> = [1, 2, 3];

Obviamente, o acima é um único tipo de array.Se eu quiser que strings e números existam em arrays, então posso usar união (|) para obter o efeito.
Qualquer e desconhecido também pode alcançar o efeito, mas há desvantagens: qualquer: É equivalente a desativar a verificação de tipo de ts, desconhecido é melhor do que qualquer e pode verificar o tipo, mas se você quiser a verificação de tipo correta, você precisa para julgar corretamente a variável definida por desconhecido Exatamente qual tipo. .

//  数值和字符串组成的数组
let list: (number | string)[] = [1, 23, '2', []]

//  unknown类型的数组
let list2: Array<unknown> = [1, 23, '2', 'any', []]


//  unknown类型的数组
let list3: Array<any> = [1, 23, '2', 'any', []]

tupla

O tipo tupla permite representar um array com um número e tipo de elementos conhecidos, que não precisam ser do mesmo tipo. Por exemplo, você pode definir um par de tuplas cujos valores são string e number.

/**
 * 
 * 元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为 string和number类型的元组。
 */

//  声明
tuple = ['zsk', 18]
console.log(tuple);
//当访问一个越界的元素,会使用联合类型替代
// tuple.push( 1, 2, '321')
tuple[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型

console.log(tuple[5].toString()); // OK, 'string' 和 'number' 都有 toString

tuple[6] = true; // Error, 布尔不是(string | number)类型

Não há definição correspondente para tupla em js, portanto, se você forçar a saída da compilação, ficará indefinido.
Além disso, se o array ts usar indexação dinâmica, ele não encontrará atributos fora dos limites. Métodos de matriz podem ser usados.

enumerar

O tipo enum é um complemento aos tipos de dados padrão do JavaScript. A enumeração é definir e nomear uma classe de dados com funções semelhantes, o que é mais intuitivo e compreensível.
As definições são declaradas usando a palavra-chave enum

//  值默认从0开始
enum Color {
    
    
  red = 2,  //  改变值
  green = 'zsk',
  blue = 'a'
}

console.log('Color', Color);

//  定义
let colorDetail: Color = Color.red
//  使用
colorDetail = Color.green

//  赋数值类型不检查
colorDetail = 123
console.log('colorDetail', colorDetail);

Qualquer

Às vezes, queremos atribuir um tipo a variáveis ​​cujo tipo não é claro na fase de programação. Esses valores podem vir de conteúdo dinâmico, como entrada do usuário ou bibliotecas de código de terceiros. Nesse caso, não queremos que o verificador de tipos verifique esses valores e deixe-os passar diretamente pela verificação da fase de compilação. Então podemos usar qualquer tipo para marcar essas variáveis:

let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean

Vazio

De certa forma, o tipo void é como o oposto do tipo any, o que significa que não há nenhum tipo. Quando uma função não retorna um valor, normalmente você verá que seu tipo de retorno é void:

function warnUser(): void {
    
    
    console.log("This is my warning message");
}

Declarar uma variável do tipo void não é muito útil, pois você só pode atribuir a ela indefinido e nulo:

let unusable: void = undefined;

Nulo e Indefinido

No TypeScript, indefinido e nulo têm seus próprios tipos chamados indefinido e nulo, respectivamente. Assim como void, seus próprios tipos não são muito úteis:

// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

Por padrão, null e undefined são subtipos de todos os tipos. Ou seja, você pode atribuir nulo e indefinido a variáveis ​​do tipo número.

No entanto, quando você especifica o sinalizador --strictNullChecks, null e undefined só podem ser atribuídos a void e seus respectivos.

Nunca

O tipo never representa o tipo de valores que nunca existem. Por exemplo, o tipo never é o tipo de valor de retorno de expressões de função ou expressões de função de seta que sempre lançam uma exceção ou nunca retornam um valor; Quando protegido.

O tipo never é um subtipo de qualquer tipo e é atribuível a qualquer tipo; no entanto, nenhum tipo é um subtipo ou atribuível ao tipo never (exceto o próprio never). Mesmo qualquer não pode ser atribuído a nunca.
Aqui estão algumas funções que retornam o tipo never:

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
    
    
    throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
    
    
    return error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
    
    
    while (true) {
    
    
    }
}

Objeto

object representa um tipo não primitivo, ou seja, um tipo diferente de número, string, booleano, símbolo, nulo ou indefinido.
APIs como Object.create podem ser melhor representadas usando o tipo de objeto. Por exemplo:

declare function create(o: object | null): void;

create({
    
     prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

tipo de afirmação

Esta é a maneira de dizer ao compilador, "confie em mim, eu sei o que estou fazendo" por meio de declarações de tipo. Asserções de tipo são como conversões de tipo em outras linguagens, mas sem verificação e desestruturação de dados especiais. Não tem impacto em tempo de execução, funciona apenas durante a fase de compilação. O TypeScript assume que você, o programador, realizou as verificações necessárias.
As asserções de tipo vêm em dois tipos. Uma é a sintaxe "colchete angular":

let someValue: any = "this is a string";

let strLength: number = (<string>someValue).length;

A outra é a sintaxe as:

let someValue: any = "this is a string";

let strLength: number = (someValue as string).length;

As duas formas são equivalentes. Qual deles usar é principalmente uma questão de preferência pessoal; no entanto, quando você usa JSX no TypeScript, apenas as asserções de sintaxe são permitidas.

epílogo

Esses tipos básicos são as unidades básicas de ts, nas quais classes e interfaces podem ser combinadas para obter efeitos mais interessantes.

Acho que você gosta

Origin blog.csdn.net/qq_43231248/article/details/128419817
Recomendado
Clasificación