TypeScript学习笔记记录
距离上一次写的关于H5的已经一月有余了,上次说道去了解Egret,发觉如果单单是去看官网的API 还是有些不够的。同时也要对TypeScript进行一些了解才行。以下是一些基础的学习记录。多数其实也是和AS3进行一种对比。
1、TypeScript后缀为ts,编译之后会生成js,而我们要在html调用ts文件的话,如ts 那么我们在引用的时候要写helloworld.js;
<script type=“text/javascript” src=“helloworld.js”></script>
以上写法是必须的 不能像下面这样
<script type=“text/javascript” src=“helloworld.js”/>
2、TS的基本数据类型 有 number、any、Array、boolean
3、数组的定义 var arr:number[]=[];var arr:Array<number>=[];
Ps:这个就有点类似于AS3中的Verctor,如果要用类似AS3中的Array的话可以是 var arr:any[]=[];即允许任何类型
4、ts可以调用外部的js库,如果要调用 那么必须包含一个声明文件.d.ts 并且需要进行引用 ts中引用外部文件库的方法是。
///<reference path=”jquery.d.ts”/>
///<reference path=”ClassTest.ts”/>
这个引用直接在ts文件里面的最前面写即可 千万不要把///当做注释了 一定要写上
5、TS中也有for in 这种关键字 但是key只能是number型
如var obj:Object={}; for( var key in obj){}这样即可,不能用key:string;
6、TS中定义类。这里所谓的类即模块 语法如下
module CT{
export class MM{
constructor(){}
getMsg(){
}
}
}
其中 CT是所谓的模块 个人感觉类似于包的概念 MM是这个类的名字 和文件名无关这点和AS3有区别。如果我们实例化MM这个类 那么应该是
///<reference path=”f/MM.ts”/>注:此处假设MM这个类位于f文件夹中
var mm:CT.MM = new CT.MM()
然后其他的调用方式和AS3类似 如 mm.getMsg();TS分有public 和private 默认情况下 是public 对于全局函数 不要写function .局部函数需要写
这就不难理解为啥egret 的很多API需要加上 egret.前缀了 这个就是模块化
如果我们在一个ts文件中调用这个ts文件里面定义的类 则不需要上面的写法
直接可以是 class MM{}; 这个和as3中的包内定义类一个意思 不需要写包名;
也可以直接在ts文件中不进行模块化的书写类
class MTTT{
constructor(){
}
public nn():string{
return “mttt”;
}
}
如上,去掉了 module 和 export关键字 同样可以 但有一点无论怎么样的写法 在调用类的时候 必须进行引用 即便是处于同一目录下 而且在html <script标签中一定要加上 ts的文件名.js 即这个文件的路径 才能顺利执行 不过egretwing里面 我们不用弄标签 这个还是挺好
7、在类中调用全局函数 全局变量时 加上 this;
8、Ts的接口用法 和其他面相对象语言类似 TS也只能单继承 多实现接口
9、Ts中函数定义
局部函数直接写方法名即可 需要区分的是 private 和 public
或者可以赋给变量值 var func=function f(){}
如果要给予变量一个类型 可以是 var func:(a:number)=>number=f(a:number):number{return 1;};
var func:()=>void=f(){};
定义函数的可选参数关键字 ? 参数默认值 类似于as3 定义其余参数同样和as3一样使用… 不过有区别的是 ts中可以指定其余参数组的数据类型 也可以不指定
如 function restFunc(…infos:number[]){}
或者 function restFunc(…infos){}//同AS3;
同样ts的函数中 存在 arguments这个参数数组 同as3