TypeScript基本语法
typescript:包含数据类型,变量,常量,函数,类与对象,运算符,程序结构、模块与命名空间等,是一种脚本语言。是javaScript语言的加强。
ts环境搭建
1.安装nodejs
nodejs是JavaSprite运行环境
nodejs.org//nodejs的官网
nodejs.cn//nodejs的中国网站
目前稳定的版本为:node-v10.16.0
TLS为长期维护版本,比较稳定
2.检查nodejs是否安装成功
打开控制台:使用node -v指令查看nodejs的版本。
打开控制台的方法:
1.win+r,输入cmd打开
在当前目录的路径栏中输入cmd,直接打开当前路径的控制台窗口
2.powershell:shift+鼠标右键->弹出菜单,选择打开powershell窗口,建议使用
3.安装typescript
打开控制台:npm i -g typescript//安装typescript,其中npm自带的包管理器,可以安装库,利用tsc检查是否安装成功
4.ts运行的原理
ts—(编译)—>js—(编译)—>运行
5.记事本运行方法
tsc test.ts(ts的文件名)//编译ts文件,编译完成之后会自动生成js文件
tsc test.ts(ts的文件名) -w//监测ts文件是否有改动,有改动则自动编译成js,直到关闭控制台窗口或ctrl+c手动停止(单文件监测编译)
创建一个文件tsconfig.json,在使用tsc -w就可以进行文件夹的监测编译,包括文件夹中的文件夹的内容(多文件监测编译),tsconfig.json中的内容:
{}
node test.js(js的文件名)//运行js文件
console.log("Hello World");//输出语句
6.IDE
vsCode软件,插件多
ts变量
1.变量的作用域
全局作用域:作用在整个ts文件
类的作用域:作用在类中,可通过类的对象访问普通类变量,类的静态变量通过类名直接访问
局部作用域:作用在目前的代码块当中
2.变量的声明
let:当前块作用域下//{}之中
var:全局环境
const:和let一样在块作用域中,但是用来声明常量,不可以进行赋值
3.变量类型的限定
let/var/const 标识符:数据类型 = 值;
变量可以不进行限定,在赋值时会自动转换成相应的类型,已赋值的变量的类型会自动限定。
4.notes
1.typescript区分大小写
2.typescript一行代码中的;可写可不写
3.注释
//单行
/*多行注释*/
数据类型
1.任意类型any,变量可以赋予任意类型的值
2.数字类型number,在ts中只有number类型,双精度64位浮点值,相当于C++中的double类型。
//查看最大最小值的属性
Number.MAX_VALUE
Number.MIN_VALUE
//数字转换成字符串
let num:number=100;
let str:string=num.toString();
3.字符串类型string,在ts中只有字符串类型,没有char类型,并且" "和’ '是通用的,都表示字符串,但双引号和单引号不能混用
//1.切割字符串,split方法,和py中的用法相似
let str="hello world a";
let str1=str.split(" ",3);//切成3段,以两个空格切割
console.log(str1);//结果为['hello','world','a']
//2.length属性
let str='12345';
console.log(str.length);//结果为5
//3.连接字符串+
let str1='123';
let str2='456';
let str3=str1+str2;//123456
//4.截取字符串subString方法
let str = '123456789';
console.log(str.substring(1,5));//2345区间取于[1,5),结束下标参数可以没有,默认到最后
console.log(str.substring(1));//23456789
4.boolean类型 true和false
5.数组类型,没有关键字,也是从下标0开始,并且不是固定长度的,可以自动扩容
let arr=[2,3,4];
arr[3]=5;
console.log(arr);//不用像C++中那样循环输出
console.log(typeof(arr));//object
let arr:any=[1,"2"];//any类型数组可以存放不同类型的元素
//多维数组
let num:number[][];
num=[[1,2,3],[4,5,6]];
6.元组类型,表示已知元素数量和类型的数组,一种特殊的数组,主要使用个数限定这个优点
let yz:[string,number];
yz=["lisi",1];
console.log(typeof(yz));//object基础类型,是一个对象,用typeof无法和数组区别开来
7.枚举类型
enum COLOR {red,green,blue};
let rr = COLOR.red;
let rrr:COLOR;
8.void类型,用于函数返回值
9.null类型,有值,定义了,赋值为null
10.undefined类型,没有值,定义了当没有赋值
11.never类型,从来不会出现的值,继承自null和undefined
typescript运算符
C++:算数运算符,逻辑运算符,关系运算符,位运算符,赋值运算符,杂项运算符(sizeof,三元,&,*,成员运算符,逗号运算符)
ts:算术运算符,逻辑运算符,关系运算符,位运算符,赋值运算符,(三元,类型typeof,字符串运算符)
1.算数运算符
七种:+、-、*、/、%、++、–
2.关系运算符
用于数值或变量判断
>、<、==、>=、<=、!=
3.逻辑运算符
多用于条件的判断,返回布尔类型的值
与&&、或||、非!
小要点:(与和或为短路运算符)前面的能判断出结果,就不会判断后面的式子
4.位运算符
用于流数据,主要是音频
&(and)、|(or)、~(取反)、<<(左移)、>>(右移)、>>>(无符号右移)
流处理和网络协议类似,两种方式:
1.服务器将所有的数据包接收到之后再发送
2.服务器接收一个数据包,检测顺序之后再直接发送给客服端
5.赋值运算符
=、+=、-=、/=、*=、%=
6.三元运算符
(条件)? 值1 : 值2
7.类型运算符
typeof()//判断是什么类型
let a = 10;
console.log(typeof(a));//输出number
8.字符串连接符+
可以多个字符串连接,和python中的用法一样
let str1="hello";
let str2="world";
console.log(str1+str2);//输出helloworld
结构
1.条件选择
if、if…else…、嵌套、switch结构,其中switch中的条件中的值必须为number或枚举类型
2.循环
for、for in、for of、while、do…while
for(const i in arr){
console.log("输出",i,arr[i]);//i为下标
}
for(const iterator of arr){
console.log(iterator);//iterator为数组中的值
}
3. 跳出
continue、break
函数
关键字:function
定义方式:function 函数名(形参列表):返回值类型{
函数体
}
使用函数的方法:函数名(形参值);
function test():number{
console.log("test");
return 1;
}//无参函数
function name(str:string):number{
console.log(str);
return 1;
}//有参函数
可选参数(?表示调用该函数可以对该参数进行赋值,也可以不对该参数进行赋值)
function test(str:number,num?:number){
...
}//num可以赋值,也可以不赋值
test("hello");
test("hello",1);//这两种调用方式都对
默认参数
function test(num:number,str:string="nb"){
...
}//当没有给str赋值时,str的值为nb
剩余参数(可变参数,多参数,参数数组),参数个数不固定
function test(...num:number[]):number{
for(let index=0;index<num.length;index++){
const element = num[index];
console.log(element);
}
return 1;
}
test(1,2,3,4,5,6);
匿名函数(无函数名)
利用变量的生存周期来防止全局下的污染
let mas=function(){
return "匿名函数";
}
console.log(msg());
//箭头函数,可以用于回调函数中
()=>{
函数体
}
类与对象
定义方式:
class stu{
//类的成员变量
id:number;
name:string;
//构造,和c++类似
constructor(){
name="123";
id=1;
}
//类的成员方法
setName(name:string):void{
this.name=name;
}
}
调用:
let yi = new stu();
yi.setName("123456");
继承:
关键字:extends
class ITStu extend str{
static major:string;//静态变量
getMajor(){
return '计算机专业';
}
setName(name:string):void{
super.setName(name);//调用父类的方法,且重写了setName方法
}
}
let yi = new ITStu();
console.log(ITStu.major);//访问静态变量的方法
引入外部代码(类似于头文件的导入)
import 类名 from 路径