深入浅出Typescript | 青训营笔记

43 阅读3分钟

为什么要学习ts

Ts vs Js

TypeScript 是 JavaScript 的超集,它包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。TypeScript 增加了静态类型、类、模块、接口和类型注解等特性。TypeScript 代码需要通过编译器编译为 JavaScript,然后再交由 JavaScript 解析器执行。

image.png

Ts带来了什么?

image.png

Ts基础

Ts数据类型

  • number 类型用于表示数字,可以是整数或浮点数。例如:let num: number = 123;
  • string 类型用于表示字符串,可以使用单引号或双引号来定义。例如:let str: string = 'hello';
  • boolean 类型用于表示布尔值,只有两个值:truefalse。例如:let isTrue: boolean = true;
  • nullundefined 分别表示空值和未定义。它们的类型分别为 nullundefined。例如:let n: null = null; let u: undefined = undefined;
  • symbol 类型表示独一无二的值。例如:let sym1 = Symbol(); let sym2 = Symbol('key');
  • 数组 类型用于表示一组相同类型的值。可以使用 类型[]Array<类型> 来定义。例如:let arr1: number[] = [1, 2, 3]; let arr2: Array<number> = [1, 2, 3];
  • 对象 类型用于表示一个对象,可以使用接口或类型别名来定义对象的类型。例如:
interface Person {
    name: string;
    age: number;
}
let person: Person = {
    name: 'lisa',
    age: 25
};

  • 枚举(Enum) 类型用于定义一组命名的常数。当一个变量有几种可能的取值时,可以将它定义为枚举类型。例如,我们可以定义一个枚举类型来表示颜色:
enum Color {
    Red,
    Green,
    Blue
}
let c: Color = Color.Green;

  • never 类型表示永不存在的值的类型,常用于抛出异常或无限循环的函数返回值类型。例如:
function error(message: string): never {
    throw new Error(message);
}

  • any 类型表示任意类型,可以赋予任意类型的值。例如:let notSure: any = 6; notSure = 'I am string'; notSure = false;
  • unknown 类型与 any 类型类似,但更安全,因为在对 unknown 类型的值进行操作之前,需要先进行类型判断。例如:
let value: unknown;
value = true;
value = 42;
value = 'hello';
if (typeof value === 'string') {
    console.log(value.toUpperCase());
}

  • void 类型表示没有任何返回值的函数返回值类型。例如:
function warnUser(): void {
    console.log('This is a warning message');
}

  • 元组(Tuple)类型用来表示一个已知元素数量和类型的数组,各元素的类型不必相同。例如,你可以定义一个元组,它包含一个 string 类型元素和一个 number 类型元素:
let tuple: [string, number];
tuple = ['hello', 123]; // OK
tuple = [123, 'hello']; // Error

Ts函数类型

在 TypeScript 中,函数类型用于定义函数的参数类型和返回值类型。 定义函数的规则如下图:

image.png

函数重载是指根据参数的类型执行不同的函数。多数用于传入不同的参数得到不同的结果。重载分为两个部分(缺一不可):声明和实现。

Ts—interface

1、定义: 为了定义对象类型。例如

interface Person {
    name: String,
    age: Number
}
let tom: Person = {
  name: 'Tom',
  age: 25
};

2、特点:

  • 可选属性:接口里的属性不全都是必需的。带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。
  • 可读属性:readonly
  • 可以描述自定义属性
  • 可以描述函数类型:
interface AddFunc {
  (num1: number, num2: number): number;
}

总结:接口非常灵活。

image.png

ts_类

1、写法:与js差不多,增加了一些定义。

2、特点:

  • 增加了private, public, protected修饰符
  • 抽象类:1、只能被继承,不能被实例化。2、作为基类,抽象方法必须被子类实现。
  • interface约束类,使用implements关键字

image.png