前言
随缘记录下TS的一些知识,随缘补充
TS的基础类型
- Number
- String
- Boolean
- Object
- Array
- Tuple
- Any
- Null
- Undefined
- Enum
- Unknown
- Void
然后介绍一下平时比较少用的几个
Tuple(元组)
1 | // Declare a tuple type |
Unknown
表示一个变量的类型是未知的,每次使用前都要进行类型检查
1 | function foo() : string|number { |
any
表示一个变量的值可以是任何类型,并且去掉类型检查,如果不是有确切的把握或者实在不想要类型检查,不然最好不要乱用
1 | function foo() : any { |
Void
通常用来表示一个函数没有返回值
1 | function warnUser(): void { |
如果一个变量被声明成了void类型,你只能给它赋值为undefined
要是没有开启–strictNullChecks,还可以赋值为null
1 | let unusable: void = undefined; |
Null and Undefined
表示一个变量的类型是undefined或者null
默认情况下,undefined
和null
是所有类型的子类型,你可以把它们赋值给声明为number
类型的变量
–strictNullChecks开启后,null和undefined只能赋值给unknown、any和它们各自的类型(除了undefined可以赋值给void)
Never
相比于void表示没有,never表示无法到达
Never一般用在下面三种情况
- 永远抛出错误的函数
- 死循环的函数
- 无法到达的分支
1 | // Function returning never must not have a reachable end point |
type和interface的区别
type是类型别名,interface是接口
- interface可以在声明函数类型时同时声明一些属性
1 | // 无法再声明其他的属性 |
我也很少用,也就在刷leetcode时写斐波那契数列时用过
- type可以声明一些interface无法表示的类型,比如union和tuple
1 | // union |
- interface对相同的声明会进行合并
1 | // interface Point { x: number; y: number; } |
这玩意可以声明一些全局方法,比如给Array添加一个remove方法用于移除指定下标
1 | interface Array<T> { |
另外我还找到了这张图,可以看看
接口和抽象类的区别
- 类可以实现(
implement
)多个接口,但只能扩展(extends
)自一个抽象类。 - 抽象类中可以包含具体实现,接口不能。
- 抽象类在运行时是可见的,可以通过
instanceof
判断。接口则只在编译时起作用。
怎么在解构时进行类型声明
1 | type Type = { |