TS vs JS
| TypeScript | JavaScript |
|---|---|
| JavaScript的超集,用来解决大型项目的代码复杂性 | 一种脚本语言,用于创建动态网页 |
| 强类型,支持静态和动态类型 | 动态弱类型语言 |
| 可以在编译期间发现和纠正错误 | 只能在运行时发现错误 |
| 不允许改变变量的数据类型 | 变量可以被赋值成不同类型 |
TS基础-基础类型
| 数据类型 | 关键字 |
|---|---|
| 任意类型 | any |
| 数字类型 | number |
| 字符串类型 | string |
| 布尔类型 | boolean |
| 数组类型 | 无 |
| 元组(Tuple) | 无 |
| 枚举 | enum |
| void | void |
| null | null |
| undefined | undefined |
| never | never |
| unknown | unknown |
注意: TypeScript 和 JavaScript 没有整数类型。
TS基础-函数类型
定义:TS定义函数类型时要定义输入参数类型和输出类型
输入参数︰参数支持可选参数和默认参数
输出参数:输出可以自动推断,没有返回值时,默认为void类型
函数重载:名称相同但参数不同,可以通过重载支持多种类型
TS基础——interface(接口):
定义:接口是为了定义对象类型
特点:
- 有可选属性:?
- 有只读属性:readonly
- 可以描述函数类型
- 可以描述自定义属性 总结:接口非常灵活duck typing
TS基础——class 类:
- 增加了public、 private、protected修饰符
- 抽象类:
- 只能被继承,不能被实例化
- 作为基类,抽象方法必须被子类实现
- interface约束类,使用implements关键字
TS进阶-高级类型
- 联合类型|
- 交叉类型&
- 类型断言
- 类型别名(type VS interface)
定义:给类型起个别名
相同点:都可以定义对象和函数,都允许继承
不同点:
(1)interface是TypeScript用来定义对象,type是用来定义别名方便使用
(2)type可以定义基本类型,interface不行
(3)interface可以合并重复声明,type不行
泛型
基本定义:
1、泛型的语法是<>里面写类型参数,一般以T表示
2、使用时两种方法指定类型:
(1)定义要使用的类型
(2)通过TS类型推断,自动推导类型
3、泛型的作用是临时占位,之后通过传来的类型进行推导
基本操作符
- typeof:获取类型
interface Person{
name:string;
age:number;
}
const sem:Person={name:'nike',age:30}
type Sem= typeof sem;//type Sem =Person
- keyof: 获取所有键
interface Person{
name:string;
age:number;
}
type H1=keyof Person;//"name" | "age"
type H2=keyof Person[];//"length" | "toString" | "pop" | "push" | "concat" | "join"
- in: 遍历枚举类型
type Keys="a" | "b" | "c"
type Obj={
[p in Keys]:any
} //-> {a:any,b:any,c:any}
- T[K]: 索引访问
interface IPerson{
name:string;
age:number;
}
let type1:IPerson['name']//string
let type2:IPerson['age']//number
- extends:泛型约束
interface Length{
length:number
}
function Log<T extends Length>(arg:T):T{
console.log(arg.length);
return arg;
}
Log({value:3})//提醒出现错误
Log({length:3})