开发环境创建
- 使用npm下载typeScript(npm -g install typescript)
- vscode插件(JavaScript and TypeScript Nightly)
为什么要用ts
- js易学易用,但是开发过程中会有很多安全隐患,维护成本高。
- js变量是动态类型,但是带来了安全隐患。
- ts是以js为基础构建的语言,完全支持js,在js的基础上新增了一些其他的东西,是js的超集
- ts扩展js,增加了类型,在语法上增加了限制,可以在任何支持js的平台中执行,但是不能被js解析器直接执行,需要编译为js,执行的最终还是js文件。js中的类型是相对于值的,ts中的类型还相对于变量(个人认为类似于其他强类型语言),ts中还新增了一些js里没有的类型。
- 支持es的新特性(因为ts完全支持js),可以在ts文件里直接写js代码。
- 增加了es不存在的新特性
- ts拥有丰富的配置,ts语法要求可以配置是否严格,可以配置编译成js的任何版本,以进一步解决浏览器之间的兼容性问题。
ts类型
-
js中原本有的类型:number、string、boolean。
示例: 在js中函数是不考虑参数的类型和个数的 let c:boolean=true;//声明变量直接赋值一般不用这样写 let c = true;//直接赋值为true,这时c就是boolean值 function greeter(person: string) { // : string 指定person的类型为string // 虽然报错但是还是会被编译成为js文件 return "Hello, " + person; }
-
直接使用字面量进行类型声明
// let a :10;相当于常量,不能重新赋值 let b:"male" | "female";//可以使用 |来连接多个类型(联合类型) 类型的别名,常用于联合类型 type myType = string|number; let m:myType
-
any。
表示任意类型,设置any相当于对该变量关闭了ts的类型检测,let a:any; 相当于let b; 一般不建议使用 -
unknown
表示未知类型,unknown实际就是一个类型安全的any,unknown类型不能直接赋值给其他变量,可以判断,也可以使用类型断言断言语法: 变量 as 类型; s = e as string; <类型>变量; s = <string>e;
-
void
用来表示空,返回值为空function fn():void{ // void 表示没有返回值(undefined,null) return; } return; return undefined; return null;
-
never
表示永远没有返回值,连空都没有 -
object(对象)
{}用来指定对象中可以包含哪些属性 语法 :{属性名:属性值,属性名:属性值} 在属性名后加问号表示属性可选 [propName:string]:any //表示任意类型的属性,表示对象中可以有任意属性 let a : {name:string,[propName:string]:any}; // a = {}报错 a = {name:''} // 表示f是一个函数,且有两个类型为number的参数同时返回值也是number let f: (a:number,b:number) => number; f= function(a,b) { return a+b; } 设置函数结构的类型声明 语法:(形参:类型,形参:类型 ...) => 返回值类型
-
array(数组)
// string[]表示字符串数组 let e:string[]; e = ['a','b'] let d:Array<number>; d = [1,2,3] 数组的类型声明: 类型[] Array<类型>
以上是js中原有的类型
以下是ts中新增的类型
-
tuple(元组,是指固定长度的数组)
语法:[类型,类型] let h:[string,string]
-
enum 枚举
举例: enum Gender{ Male = 0, Female = 1 } let i : {name:string,gender:Gender} i = { name:'xiaow', gender:Gender.Male }