关于typescript
static(对应的dynamic在runtime检查)
structural(对应nominal)
类型
top type:any、unknown
any:可包含js中任何类型的值
unknown:可包含js中任何类型的值,但在使用前必须先做类型检查(typeof、instanceof)
bottom type:never
基础类型
string、number、boolean、null、undefined、bigint、symbol、any、unknown、never、void
12(字面量类型的例子)
Date、Event、HTML。。。
聚合类型
Object
普通对象
let obj : {
属性名1:属性类型1
属性名2:属性类型2
属性名3?:属性类型3
}
非必需的属性名后加问号
字典性质对象(有不同的属性名,属性名后的类型相同)
Array
特征: 由相同类型的数据组成
let arr : string[]
模式是type[]
tuple(special type of array元组)
特征:数组的长度、每个位置的类型确定
let tuple : [string, number]
Union and Intersection Types
都是操作符
union
表示多个类型都可以 eg: 'success' | 'error'
常用于返回成功或失败类型
function fun() : ['success', string] | ['error', Error]
intersection(重叠)
两个类型都满足,对特定类型的具体化
function fun() : Date & {end: Date}
type、interface
都可以被import export
type
giving a type a name
type yourTypeName = your type's structural
interface
只能被用于定义object类型
继承:extends 、implements
extends用于class继承class、interface继承interface
implements用于class继承interface; 可以拓展
递归类型
函数
函数返回值void(无效的)和undefined的区别:
void只被用于函数返回值的类型,表示应当忽略这个值
undefined就是要返回undefined
多态(overload)
generics(泛型?)
占位符作用。<>是类型参数列表,T是定义的类型参数。
可访问性修饰符
针对类的字段、函数,能够访问和使用
private: 对自身的类可见
protected:对自身的类和子类可见
public:都可以(default)
readonly可以和上面3者进行组合