TypeScript
1. 准备阶段
安装TypeScript基本环境
1 | npm i typescript -g |
类型推断
1 | 如果定义的时候没有赋值,不管之后有没有赋值, |
tsconfig
1 | { |
declare
1 | // 全局类型标注 |
2. TS基础
基本类型
数据类型 | 描述 |
---|---|
boolean | |
number | |
string | 推荐单引号 |
Array | Array |
tuple | 元组 固定长度的数组 |
Object | 任意的JS对象 但是不能调用其他方法 即便它真的有 |
any | 任意类型 |
unknown | 类型安全的any 区别是any会把别的也推断成any 他只推断自己 |
null | 可以赋给其他类型变量 但如果–strictNullChecks 就只能给自己 |
undefined | 可以赋给其他类型变量 但如果–strictNullChecks 就只能给自己 |
void | 表示没有任何类型 函数没有返回值他的类型就是void |
never | 没有值 不能是任何值: 用于函数没有返回值 例如只用于报错的函数 |
其他类型
数据类型 | 描述 |
---|---|
?: | 可选属性 |
!: | 非空断言 => ?. |
readonly | 只读 |
[xxx:string ]:any | 不规定后续内容类型 |
enum | 枚举 只能赋值为 undefined 和 null |
元组 | let x: [number, string] = [10, “jack”] |
| | 联合类型 只能同时为一种 |
& | 交叉类型 合并 |
Partial | 可选类型合并 Partial <xxx & xxx> |
3. 基本API
定义变量
1 | # 变量: 数据类型 |
类型断言
1 | // 手动指定某一个值的类型 |
type
1 | # base |
函数
1 | # |
枚举
1 | // 用于取值 并限定在一定范围 => 会被编译成一个双向映射的对象 |
4. inerface
1 | # base |
5. 泛型
1 | # |
6. class
js
1 | #私有属性 |
API
1 | # 遍历属性 |
类表达式
1 | const aaa = class { |
4个状态
public
1 | 实例和父类能都访问 |
static
1 | // 只能父类点出来 |
private
1 | // private 私有的 外界无法访问 不能被继承 |
protected
1 | // protected 受保护的 外界无法访问 可以被继承 |
readonly
1 | readonly ccc: string = 'ss' |
get set
1 | // 手动定义 获取和更改方法 的computed |
constructor
constructor
1 | class Person { |
super
1 | class Animal { |
extends
1 | 子类重写方法 在子类中 会覆盖父类的方法 |
implements
1 | # implements 需要重写属性和方法 |
abstract
1 | # 抽象类 禁止被实例化 用来被继承的 |
7. 装饰器
- 在运行时立即调用 被装饰的声明信息做为参数传入
1
2
3
4
5
6
7
8
9
10
11function Path(name: string) {
console.log('需要通过柯里化形式拿到参数,默认传入的是target')
return function (traget: any) {
console.dir(name, traget.age)
}
}
'zhangsan') (
class Hello {
public static age: number = 12
}
8. 高级API
Partial
1 | // 可选类型 |
omit
1 | // 忽视重写某个属性 |
Record
1 | // 定义一个对象的 key 和 value |
typeof
1 | // 自动推断后续的属性 |
in
1 | type ChinaMobilePhones = '10086' | '10010' | '10000' |
keyof
1 | class Application<T> { |
9. 工具函数
覆盖接口类型
1 | # 覆盖接口属性 |
10. react接口
1 | # react组件接口 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LiuYuanhua!
评论