(syntax)typescript
2022-09-01 00:00:00
typescript
- 类型系统{ 静态类型、弱类型 }、面向对象、添加类型系统的、JS超集的扩展 适用于任何规模
数据类型(:类型)
- 原始数据类型
- :string let name:string = “zs” let one: “1000” | “2000”
- :number let num:number = 1000
- :boolean let flag:boolean = false
- :void 空值 function getName(str:string):void{ } 没有任何类型 void 返回值为空underfined
- never 不会出现的值
- Symbol 独一无二的值 Symbol(“key”) 对象的键 [Symbol()]:”value” 类的属性名或方法名
class { [Symbol()](){ }
c[属性]() c[Symbol()]()
- :undefined :null let nu:null = null 、let un:undefined = undefined
- BigInt 大整数
- 引用数据类型
- 数组 array :类型[ ]
- :数据类型[] 表示法
:number[]
let num:number[] = [100,200]- 多维数组 arrArr:arr[][] = [[],[]]
:Array<String>
数组泛型Array<elemType元素类型>
let arr:Array<number> = []
- 接口表示数组 interface numArray{ [index:number]:number 索引和值都是number }
- 数组在函数中的使用 作为参数 func(arr:string[]) 作为函数的返回值 func():string[]{ }
- any可以插入不同类型的数组元素 let arr:any[] = [ ]
- :数据类型[] 表示法
- 元组 tuple :[ , ] 类似数组 不限制类型
- let tup:[string,boolean,number] = [‘str’,false,1000] 类型要与赋值一一对应
- 越界元素为联合类型
- push pop tupe_name[3] = 100 tupe[index]
- Map 类似对象 不限制类型
- 键值对(任何值都可以作为一个键或者一个值)
new Map([["keyA","value1"],["keyB","value2"]])
- 方法 clear set get has has delete size keys values entries set(“google”,1)
- 迭代 for of
- 对象 object let user: { name:string,age:number } use = { name:”zs”,age:”90” } let use:user; let { name:”zs”,age:”90” }:{ name:string,age:number };
- function(obj: { site1:string, site2 :string })
- 枚举 enum
- 普通枚举 enum 数字枚举 enum xx { a=100 }字符串枚举 enum xx { a=“str” } xx.a
- 常量枚举 const enum xx{ }
- 外部枚举 declare xx enum{ }(声明文件)
- 外部枚举 declare enum xx{ }
- 外部常量枚举 declare const enum xx{ }
- 联合类型 union types |
- let name : string | number | boolean 取值为其中一种
- 可以作为函数参数 func(name:number | string)
- 联合类型数组(将数组声明为联合类型)var arr:number[]|string[];
- 任意值(任意类型) Any:any let num:any = 100
- 数组 array :类型[ ]
- var/const/let [变量名]:[类型] = 值
函数 vs 方法 类里面的是方法,类外的是函数 function 定义
函数类型 参数类型 和 返回值类型 (num?:number = 1000)
- 函数返回值类型和参数类型 function fuc(par:number,str:string):return_type{ return xxx }
- 接口定义函数 interface fuc{ (str1:string,num1:number):boolean } 、 let myfuc = func、 myfuc = function(str1:string,num1:number){ return } \ 、interface 名 { (参数:类型):返回值类型} 接口定义的和使用的类型要对函数名赋值时要保证参数个数、参数类型、返回值类型不变
函数定义
- 函数声明 function fuc(par:number,str:string):return_type{ return xxx }
- 函数表达式 let func = function(x:number,y:number):number{ return } 把函数赋值给变量的就是函数表达式
函数参数
- 可选参数 (last?:string) 可选参数后面不允许再出现必需参数
- 默认参数 (str:string = “message”) (str:string ?= “message”)
- 剩余参数 …rest 最后一个参数 不确定数量的参数
函数重载 允许一个函数接受不同数量或类型的参数(参数不同)、返回类型可同可不同 重载允许接受
- function fnc(x:number|string):number|string|void{ } 重载形式: function fuc(x:number):number function fuc(x:string):void 本质就是在多个类型中选择任意的数据类型
- 参数类型不同、参数数量不同、参数类型顺序不同
函数种类
- 匿名函数 var res = function(a:number,b:number){ } 没有名字的函数 、带参数的匿名函数表达式和不带参数
- 匿名自调用函数IFFE (function(){ })() / function(){} 在第一个()中 (xxx)()
- 构造函数
new Function(“参数”,参数,"函数体")
- 递归函数 自已调用自已
- Lambda函数(箭头函数) ( [param1, parma2,…param n] )=>statement; (str:string,num:number):number[] =>{ return xxx}
- 匿名函数 var res = function(a:number,b:number){ } 没有名字的函数 、带参数的匿名函数表达式和不带参数
类型推论(自动转换判断类型、类型自动识别) JS => TS 方便JS文件兼容TS
- 自动指定数据类型、没有赋值或不能推断出、都会被推断成Any类型
- 多个类型推断会推断出联合类型 let = [100,true,”string”]: number|boolean|string;
- 按上下文归类 通过代码上下文自动判定
类型断言 as
类型别名(重命名) type
字符串字面量类型 type
声明文件
类与接口
- 类
- 接口
声明合并
内置对象
命名空间和模块
Iterators和Generators