TypeScript : 语法及特性
当let声明一个变量的时候它使用的词法作用域或者是块作用域。块作用域指的就是他们包含的块以外的不能访问。
const声明:是let声明有相同的作用域规则,但是它被赋值后不能再被改变。类似于java的final
typescript 可以用 `` 来声明多行字符串,编译之后js文件换行的地方会加上\n
在` ` 里面可以用 ${xxx变量/方法} 这种格式加入变量或方法,称为字符串模板.感觉就像普通语言中的print函数一样
typescript引入了类型的概念,如 var name: string = "haha"; 变量名name后面跟冒号后面加上变量类型,如果再把name赋一个
数字类型的值,那么会报错,但是生成的js文件依然没有问题.声明为any可以存放任何类型
方法之后也可以跟返回值的类型, 如 function test() : string { return:";" } 那么只能返回string类型.
可以自定义数据类型,用 class关键字 ,如 class person {name: string; age: number;} 就声明了一个一个person类,里面有
string类型的name 和 number类型的age. 创建一个person 对象用 var zhangsan:person = new person();
zhangsan.name = "";用这种方式赋值.
函数可选参数如:function test(a = "haha": string, b?: string) : void {} b后面加?表示可选参数,a是有默认值的参数,
可选参数必须声明在必选参数后面.
可以用 function test(...args) 这种方法给函数传不定长参数,args是一个数组.
es6 支持 yield 需要在函数声明之后加上* , 如 function* test(){ }, 里面在返回处用 yield关键字,如果 yield后面有语句
如 yield math.random(); 那么可以创建一个对象,用 对象.next().value() 接收这个值.
析构表达式,如,一个函数返回一个对象 {name:"haha", age:18} ,那么可以这样接收 var {name, age} = 函数();
如果接收名和传过来的名字不一样,可以加上 var {name: namex, age} = 函数(); 这样表示接收name参数的值存储在namex变量里面, 还可以嵌套表达式, 如果传回来的对象,其中一个属性又是一个对象,那么可以这样:var {name:{firstname:haha}} = 函数()
表示把返回的对象的name对象的firstname属性取出来存到haha变量里面.
析构表达式如果想要接收数组,那么可以这样: var [num1, num2, ...args] = array1; 表示 num1变量接收 array1[0] 的值,
num2 是 array1[1] ,剩下的全部放到args数组里面去. 析构表达式也可以作为方法的参数.
箭头表达式,类似于lambda表达式,是用js匿名函数实现的, 如 var sum = (num1=123, num2=321) => num1 + num2;执行sum(),就会
返回语句的执行结果.一般用他来解决js中this关键字的问题.看起来像把 function(){ } 替换为 () =>{ } ,注意如果匿名函数多行的话后面的语句要加在花括号中.
for (var n of array1) { } 新的循环方式:for of 会忽略掉数组的属性,并且循环取到的n是数组里面的值.还可以循环字符串.
类的访问控制符有三个 public private protected,默认是public
类的构造方法: constructor(public name:string){ } 声明构造方法,同时声明一个name属性,在实例化的时候可以直接赋值.注意,
如果这样的话,必须要在属性上加访问控制符.子类 extends继承父类时,必须要在构造函数里面调用父类构造函数,super();
获取类的属性且不确定变量名的时候用 类名[变量名] 这种方法 不能用 类名.属性名
typescript也有泛型的概念,如: var array1: array<person> = []; 这个数组里面只能存放person类和它的子类.
接口的定义: interface animal { eat(); } 可以作为方法的参数类型,也可以用类 implements 实现这个接口.
export 对外开放的东西,加了export修饰符,那么别的文件就可以 import { xxx } from "./xxxx" 导入.
类型定义文件以 .d.ts结尾,如想用jquery库,可以下载一个jquery的类型定义文件,就可以在ts文件中使用jquery.