为什么要学习ts
Ts vs Js
TypeScript 是 JavaScript 的超集,它包含了 JavaScript 的所有元素,可以载入 JavaScript 代码运行,并扩展了 JavaScript 的语法。TypeScript 增加了静态类型、类、模块、接口和类型注解等特性。TypeScript 代码需要通过编译器编译为 JavaScript,然后再交由 JavaScript 解析器执行。
Ts带来了什么?
Ts基础
Ts数据类型
- number 类型用于表示数字,可以是整数或浮点数。例如:
let num: number = 123; - string 类型用于表示字符串,可以使用单引号或双引号来定义。例如:
let str: string = 'hello'; - boolean 类型用于表示布尔值,只有两个值:
true和false。例如:let isTrue: boolean = true; - null 和 undefined 分别表示空值和未定义。它们的类型分别为
null和undefined。例如: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 中,函数类型用于定义函数的参数类型和返回值类型。 定义函数的规则如下图:
函数重载是指根据参数的类型执行不同的函数。多数用于传入不同的参数得到不同的结果。重载分为两个部分(缺一不可):声明和实现。
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;
}
总结:接口非常灵活。
ts_类
1、写法:与js差不多,增加了一些定义。
2、特点:
- 增加了private, public, protected修饰符
- 抽象类:1、只能被继承,不能被实例化。2、作为基类,抽象方法必须被子类实现。
- interface约束类,使用implements关键字