类型断言as
用来告诉解析器变量的实际类型
语法:
变量 as 类型:a as string
<类型> 变量: a
&用法
let j: {name: string} & {age: number};
j = {name: ‘123’, age; 1}
类型的别名
type myType = 1 | 2 | 3 | 4
let a: myType
let b: myType
抽象类
以abstract开头的类是抽象类
抽象类没有方法体
抽象类不能用来创建对象
抽象类就是专门用来被继承的类
抽象方法只能定义在抽象类种,子类必须对抽象方法进行重写
泛型
在定义函数或是类时,如果遇到类型不明确就可以使用泛型
function fn(a: T): T {
return a
}
可以直接调用泛型函数
fn(a: 10) // 不指定泛型,TS可以自动对类型进行推断
fn(a: ‘hello’) // 指定泛型
泛型可以同时指定多个
function fn2<T, K>(a: T, b: K): T{
return a
}
fn2<number, string>(a: 1, b: ‘1’)
interface Inter{
length: number
}
T extends Inter 表示泛型T必须是Inter实现类(子类)
function fn3(a: T): number{
return a.length
}
基础类型
number,string,boolean,null,undefined
对象:
{} 用来指定对象可以包含哪些属性
语法:{属性名:属性值,属性名:属性值}
在属性名后加上?,表示属性是可选的
let b: {name: string, age?: number}
[propName: string]: any 表示任意类型的属性
let c:{name string, [propName: string]: any}
设置函数结构的类型声明:
语法:(形参:类型, 形参:类型…) => 返回值
数组
数组类型声明
类型[]
Array<类型>
元组
元组就是固定长度的数组
语法:[类型,类型,类型]
枚举
enum 名称{
属性名,
属性名
}
任意类型:void
用来表示空,以函数为例,就表示没有返回值的函数
never
表示永远不会返回结果,一般用于报错throw抛异常
any
unknow:
实际上是一个类型安全的any,不能赋值给其它类型变量
联合类型
联合类型(Union Types)可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值
let j: 1 | 2