typescript 的出现是为 javascript 添加类型约束
- 编写的 ts 代码最终都会编译成 js 代码运行,浏览器不支持直接运行 ts 类型的代码
变量的声明
var/let/const
变量名:数据类型 = 赋值
例如: const hello: string= 'hello world'
数据类型的类别
number
let num1: number = 6; |
支持二、八、十六进制
不区分 int 整数 和 double 浮点数
boolean
取值 ture
& false
let isShow: boolean = false; |
string
const name: string = 'fantasy' |
Array
// 约束数组内容是 string 类型 |
object
object 可以表述一个对象
const infos: object = { |
symbol
// symbol来定义相同的名称,Symbol函数返回的是不同的值 |
null & undefined
undefined和null两者各自有自己的类型分别叫做undefined和null
它们的本身的类型用处不是很大
let u: undefined = undefined; |
any
无法确定一个变量的类型,并且可能它会发生变化,可以使用any类型
let id: any = 123 |
void
某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,返回值类型为 void
function hello(): void { |
声明一个void类型的变量没有什么用,只能为它赋予undefined和null
never
never类型表示的是那些永不存在的值的类型。
例如,函数一个死循环和抛出一个异常
function loop(): never{ |
Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let arr: [string,number] = ['name',18] |
函数的类型
参数
声明函数时,在每个参数后添加类型注解,以声明函数接受的参数类型
function foo(name: string,age: number){ |
返回值
注解出现在函数列表的后面
function(num1: number,num2: number): number{ |
匿名函数
当函数出现在TypeScript可以确定该函数会被如何调用的地方时,参数会自动指定类型
const lists = ['aaa','bbb','ccc'] |
上下文类型(contextual typing)可以帮助确定参数和返回值的类型
即TypeScript会根据forEach函数的类型以及数组的类型推断出item的类型
变量的类型推导
开发中并不会在声明每一个变量时都写上对应的数据类型
TypeScript本身的可以特性帮助我们推断出对应的变量类型
let str = 'hello' |
联合类型
- 联合类型表示由多个类型组成
- 表示可以是多个类型中任意一个类型
- 类型中每一个类型被称为联合成员
function foo(id: number|string ){ |
type类型别名
为了类型注解可以方便多次使用可以类型别名
type infosType = { |
interface接口
接口用来声明对象类型,与type别名大致相同
interface Iinfos { |
type & interface 区别
- 如果是定义非对象类型,通常推荐使用type
- interface可以重复定义某一个的接口的属性和方法
- type定义的是别名,别名是不能重复
interface Iinfo { |
交叉类型
交叉类型表示同时满足多个条件
通常应用于对象类型交叉
interface Iinfo { |
类型断言
某种情况TypeScript无法获取具体的类型信息,需要使用类型断言
as : 类型
const myimg = document.getElementById('pic') as HTMLImageElement |
非空断言
非空断言使用的是 !
,表示可以确定某个标识符是有值的,跳过ts在编译阶段对它的检测
function foo(msg?: string){ |
字面量类型
如:
let msg: 'hello' ='hello' |
用 const 声明的常量默认是字面量类型
默认情况这样作意义不大
搭配联合类型使用
type positionType = 'left' | 'right' | 'up' | 'down' |
字面量推理
const info ={ |
类型缩小
- 通过类似于
typeof padding === "number"
的判断语句,来改变TypeScript的执行路径 - 给定的执行路径中,我们可以缩小比声明时更小的类型,这个过程称之为 缩小( Narrowing )
- 我们编写的 typeof padding === "number 可以称之为 类型保护(type guards)
常见的类型保护:typeof
、===,!==
、instanceof
、in
// typeof |