TypeScript
一、安装
命令:npm i -g typescript
验证是否安装:tsc
二、编译
命令:tsc 文件名.ts
tsc //编译目录下面所有文件
tsc 文件名.ts -w //监视自动更新(只对当前文件有效)
//全局监视更新
//根目录新建tsconfig.json
//tsc -w //全局监视自动更新
//tsconfig.json配置文件
1.include : [ //哪些文件会自动编译
'./src//*' //:任意目录;*:任意文件
]
2.exclude:[
'./src/hello/**/*' //不需要编译的文件
]
3.extends:'文件' //继承文件
4.files:['文件名1','文件名2'] //需要编译的文件名
5.compilerOptions:{
'target':'ES3' //要编译成的js版本
'module':'ES3' //模块化解决方案
'lib':['ES6'] //指定浏览器要使用的库
'outDir':'./dist' //编译后的js文件要放到的文件目录
'outFile':'./dist/app.js' //将左右js文件合并到一个文件中(全局作用域中的文件)
'allowJs':false //是否对js文件进行编译
'checkJs':false //是否检查js语法
'removeComments':true //是否编译注释
'noEmit':false //不生成编译后的文件
'noEmitOnError':false //当有错误的时候不生成编译后的文件
'alwaysStrict':false //编译后的文件是否使用严格模式
'noImplicitAny':true //不会自己转any类型
'npImplicitThis':true //不允许不明确的this类型
'strictNullChecks':true //严格检查空值
'strict':true //严格检查总开关
}
三、基本类型
let a : number = 1;
let b : string = 'hello';
let c = true; //这种的ts会自动判断类型
function sum( a:number, b:number ) : number {}
//前两个是参数的数据类型,最后一个是函数返回值的数据类型
let a : 10; //赋值后无法修改
let d : any //任意类型
let c : unkown //不知道是什么类型,无法赋值给其他的变量
//类型断言
let d = e as string; //断言这个e就是字符串
let d = e //同上
function fn() : void {} //函数没有返回值(undefined)
function fn() : never {} //函数永远不会返回结果
let f: { name : string } //f是一个对象,并且对象里面只有个name属性,并且是字符串
let f : { name? : string} //name属性可能有也可能没有
let f : { name : string ,[propsName : string] : any } //除了name属性,还可以有任意属性
let fn : ( a : number, b : number )=>number //函数fn两个参数,都是number,返回值是number
let g : string[] //字符串数组
let g : Array //同上
//元组:固定长度的数组
let h : [string, string] //长度为2的string数组
//enum 枚举
enum Gender{
man : 1
woman : 0
}
let i : {gender:Gender}
i = { gender:Gender.man }
//类型别名
type num = 1 | 2 | 3 | 4 | 5
let k : num
四、打包
五、面向对象
1、类
(1)
class Person{
name : string = '这是名字';
static age : number = 18; //不可以修改的属性
readonly sex : string = '男'; //只读属性
//定义方法
togetData(){
//方法
}
state togetData(){} //类方法
}
constructor(){} //构造函数
--继承
class cat extends animal{
}
super表示父类
abstract class animal{} //抽象类,不能用来创建对象
abstract togetData():void //抽象方法,只能定义在抽象类里面,子类必须重写