TypeScript
Typescript
1 准备阶段
1 | tsc hello.ts => .ts |
2. 概念
类型推断
1 | 如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查: |
tsconfig
1 | { |
declare
1 | // 全局类型标注 |
export
1 | # 兼容require |
namespace
1 | # 相当于自执行函数 |
mixin
1 | class SmartObject implements Disposable, Activatable { } |
this 指向
1 | type ThisPointer = { name: '19Qingfeng' }; |
版本问题
1 | @types/react 要和ts版本对应 不然会报错 |
3 数据类型
基本类型
数据类型 | 描述 |
---|---|
boolean | |
number | |
string | 推荐单引号 |
Array | Array |
tuple | 元组 固定长度的数组 |
Object | 任意的 JS 对象 但是不能调用其他方法 即便它真的有 |
any | 任意类型 |
unknown | 类型安全的 any 区别是 any 会把别的也推断成 any 他只推断自己 |
null | 可以赋给其他类型变量 但如果–strictNullChecks 就只能给自己 |
undefined | 可以赋给其他类型变量 但如果–strictNullChecks 就只能给自己 |
void | 函数没有返回值他的类型就是 void 只能 undefined null |
never | 没有值 不能是任何值: 用于函数没有返回值 例如只用于报错的函数 |
ReadonlyArray |
让数组创建后不能修改 可以类型断言重写 |
其他类型
数据类型 | 描述 |
---|---|
?: | 可选属性 |
!: | 非空断言 => ?. |
!. | 类型断言 去除 null undefined |
readonly | 只读 |
[xxx:string ]:any | 不规定后续内容类型 |
enum | 枚举 只能赋值为 undefined 和 null |
元组 | let x: [number, string] = [10, “jack”] |
| | 联合类型 只能同时为一种 |
& | 交叉类型 合并 |
Partial | 可选类型合并 Partial <xxx & xxx> |
4. 基本 API
定义变量
1 | # 变量: 数据类型 |
类型断言
1 | // 手动指定某一个值的类型 |
type
- 起别名不会新建一个类型 - 它创建了一个新 名字来引用那个类型
- 错误信息不会使用别名
- 类型别名不能被
extends
和implements
- 如果无法通过接口来描述一个类型并且需要使用联合类型或元组类型,这时通常会使用类型别名
1 | # base |
函数
1 | # |
枚举
1 | // 用于取值 并限定在一定范围 => 会被编译成一个双向映射的对象 |
5.inerface
1 | # base |
6. 泛型
1 | # |
7. 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 | # 抽象类 禁止被实例化 用来被继承的 |
8. 装饰器
- 在运行时立即调用 被装饰的声明信息做为参数传入
1 | function Path(name: string) { |
9. 高级 API
Partial
1 | // 可选类型 |
omit
1 | // 忽视重写某个属性 |
Record
1 | // 定义一个对象的 key 和 value |
typeof
1 | // 自动推断后续的属性 |
keyof
1 | # keyof 可以用来取得一个对象接口的所有 key 值. |
in
1 | in 则可以遍历枚举类型 |
is
1 | function isNumber(x: any): x is number { //默认传入的是number类型 |
Pick
1 | # 从复合类型中 取出几个想要的类型组合 |
infer
1 | 表示在 extends 条件语句中待推断的类型变量 |
Parameters
1 | # Parameters<T> 得函数的参数类型组成的元组类型 |
AxiosReturnType
Mutable
10. 其他
工具函数
1 | # 覆盖接口属性 |
高级泛型
1 | Readonly<T> |
条件类型
1 | # Exclude |
拆包
1 | function unproxify<T>(t: Proxify<T>): T { |
11. react 接口
1 | # class 基类 |
1 | # react组件接口 |
1 | # useRef |
12 问题
bind
1 | bind会丢失类型 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Eternallycyf!
评论