typescript学习总结:与js相比,强化了数据类型,添加了es6新增功能,强化了类,模块化开发;我觉得吧其实就是js一个添加了es6的严格模式下开发规范;
typescript的文件后缀 .ts;使用tsc 文件名,编译.ts为.js文件,使用node,运行js文件;
tsc常见编译参数如下
--help
--module 载入扩展模块
--target 设置ECMA版本
--declaration 额外生成一个.d.ts扩展名文件
--removeComments 删除文件注释
--out 编译多个文件并合并到一个输出的文件
--sourcemap 生成一个sourcemap(.map)文件,存储对应源代码与编译代码位置的文件
--module nolmplictiAny 在表达式和声明上有隐含的any类型的报错
--watch 监听模式下运行编译器
npm install typescript. //安装typescript
tsc test.ts //编译ts文件
node test.js. //运行js文件
一、数据类型
1.sring:字符串类型,关键字string,例如:let name:string="张山"
2.number:数字类型,关键字number,例如:let age:number=3;
3.boolean:布尔类型,关键字boolean,例如:let isshow:boolean=false;
4.any:任意值类型,关键字any;
5.null:表示对象值缺省
6.undefined:用于初始化变量为一个未定义的值
7.never:代表从不会出现的值;同城用于返回错误
8.void:标识该方法没有返回值,关键字 void;function hello():void{}
9.数组类型:无关键字,定义let arr[]=[1,2,3]
10.元组:已知数组元素类型的数组;let x:[string,number];x=["张三",30]
11.枚举:关键字emun,定义数值集合;enum Color {Red,Green,Blue };let c: Color=Color.Blue;
12.联合类型:
定义let val:string|number|boolean;
枚举:字符串枚举,数值枚举,异构枚举
(1)枚举的值默认从0开始,可以指定值,其后面的值递增
(2)在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。
改变变量数据类型:
(1)可以使用any:实现不确定值得切换
(2)类型断言:<类型> 值;或 值 as 类型;例如:let age=string | number;(<string>age).length,或是(age as string).length
(3)typescript是强类型,会对未定义类型变量进行类型推断,不符合会报错;
(4) 联合类型使属性必须是所有类型都有属性,否则会报错
使用typeof 判断类型,instanceof判断对象是否是指定类型;
函数
(1)普通函数定义:function name(){}
(2)无返回值函数 function name():void {}
(3)定义返回值类型函数:function name():type {}
(4)带参数函数:function name(param1:datatype,param2:datatype){};
(5)带可选参数:function name(param1:datatype,params2?:datatype){};
(6)默认值参数:function name(params1:dataype,params2:dataype=default){}
(7) 剩余参数:function name(params1:datatype,...restofName:string[]){}
(8) 匿名函数,匿名函数调用:(function(){})()
(9)构造函数:new Function ([arg1[, arg2[, ...argN]],] functionBody)
(10) 递归函数:函数自己调用自己
(11)箭头函数:es6箭头函数
(12)函数重载
typescript 接口interface
(1)接口定义:interface interface_name{}
接口不能转换成javascript,他只是typescriot的一部分;
(2)使用接口:let customer:interface_name{}
(3)接口属性:必选属性,可选属性(标识符?),任意属性(属性值必须包含所有接口的类型)
(4)接口继承:extends,多个接口继承使用,分开
typescript 类class
(1) 定义 class className{}
(2) 使用 new clasName(参数)
(3) 使用static定义静态属性和方法,可以直接使用类名调用;
(4) 类的继承 extends,不支持多个继承,支持多重继承;
(5) 继承类的方法重写:super 关键字是对父类的直接引用,该关键字可以引用父类的属性和方法
(6) 访问修饰符:public(公有),protected(自身及子类,父类访问),private(私有,自身反问)
(7) 类可以实现接口,使用关键字 implements,并将 interest 字段作为类的属性使用
typescript不能直接给对象添加方和和属性,可以使用类型模板;
命名空间:
(1)关键字namespace,定义命名空间,export输出接口,类;
(2)命名空间可以嵌套
(3)命名空间的使用,.调用,/// <reference path = "SomeFileName.ts" />
typeScript声明文件;
(1)类型:.d.ts后缀名;
declare var jQuery: (selector: string) => any;
jQuery('#foo');
declare 关键字来定义它的类型,帮助 TypeScript 判断我们传入的参数类型对不对:
declare 定义的类型只会用于编译时的检查,编译结果中会被删除。