学无止境

少年辛苦终身事,莫向光阴惰寸功。——唐·杜荀鹤《题弟侄书堂》


typescript基础

基础

  • typescript属于静态语言

原始数据类型

  • javascript 的类型分为两种: 原始数据类型和对象类型
  • 原始数据类型包括:布尔值,数值,字符串,null,undefined以及ES6中的新类型symbl

布尔值

  • typescript 中boolean 类型为true和false

数值

  • number

###字符串

  • string

空值

  • javascript中没有空值(Void)概念,但是可以用void表示没有任何返回值的函数
  • 声明一个coid类型的变量没有作用,因为你只能将他赋值为undefined和null

null和undefined

  • typescript中可以使用Null和undefined来定义这两个原始数据类型
  • 与void相比,undefined和null是所有类型的子类型,也就是说undefined类型的变量,可以赋值给number类型的变量
  • 而void不能赋值给number类型的变量

任意值

  • 使用any来进行表示
  • 如果是一个普通类型,在复制过程中改变类型是不被允许的
  • 如果是any类型,则允许被赋值为任意类型
  • let anyThind: any = "hello"
  • 生命一个变量为任意值之后,对他的任何操作,返回的数据类型都是任意值

未声明类型的变量

  • 变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型

类型推导

  • 如果没有明确的类型类型,那么typescript会依照类型推导的规则推断出一个类型
  • 如果定义的时候没有赋值,不管之后有没有赋值操作,都会被推断为any类型而完全不被类型检查

联合类型

  • 表示取值的时候可为多种类型中的一种,使用|来进行区分
  • let myFavoriteNumber: String| number

访问联合类型的属性或方法

  • 当typescript不确定一个联合类型的变量到底是那个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法。

对象的类型-接口

  • 我们使用接口interface来定义对象的类型
  • 在面向对象语言中,接口是一个很重要的概念,他是对行为的抽象,而具体如何行动需要由类去实现implement
  • 定义对象的时候少了一些属性或者多了一些没有定义的属性是不被允许的
  • 赋值的时候,变量的形状与类型必须要个接口保持一致

可选属性?

  • 可选属性在接口interfaces定义中使用age?来进行表示

任意属性[]

  • 使用[propName: string]: any定义了任意属性
  • 一旦定义了任意属性,那么确定属性和可选属性的类型都必须是它的类型的子集
  • 一个接口中只能定义一个任意属性。如果接口中有多个类型的属性,则可以在任意属性中使用联合类型:[propName:string]: number|string

只读属性

  • readonly定义只读属性
  • 在接口interfaces中使用readonly id: number 来进行表示

数组类型

  • 类型+方括号的表达方式let fibonacci: number[] = [1, 2, 3, 4, 5]

数组泛型

  • 数组泛型(Array Generic) Array<elemType>来表示数组
  • let fibonacci: Array<number> = [1, 2, 3, 4, 5]

用接口interfaces来表示数组

  • interface NumberArray{[index:number]: number}
  • let fibonacci:NumberArray = [1, 2, 3, 4, 5]

类数组

any在数组中的应用

  • let list: any[] = ['test', 25, {website: "http://127.0.0.1"}]

函数

可选参数

  • function buildName(firstName: string, lastName?: string)

剩余参数

  • function push(array, ...items) items是数组

函数重载

  • 重载允许一个函数接受不同数量或者类型的参数,做出不同的处理

类型断言

  • 类型断言可以用来手动指定一个值的类型
  • 语法值as类型或者<类型>值

类型断言的用途

  • 将一个联合类型断言为其中一个类型
  • 当typescript不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问次联合类型的所有类型中的共有属性或者方法。

声明文件

  • 当使用第三方库的时候,我们需要引用它的声明文件,才能或得对应的代码补全、接口提示等功能

新语法索引

  • declare var 声明全局变量
  • declare function 声明全局方法
  • declare class 声明全局类
  • declare enum声明全局枚举
  • declare namespace 声明(含有子属性的)全局对象
  • interface和type声明全局类型
  • export 导出变量
  • export default ES6默认导出
  • export = commonjs导出模块
  • export as namespace UDM库声明全局变量
  • declare global扩展全局变量
  • declare module 扩展模块
  • /// <reference />三斜线指令

什么是声明语句

  • 类似与import

书写声明文件

  • .d.ts结尾