typescript
安装
- npm install typescript@2.9.2 -g ————安装ts
- npm install ts-node@7.0.0 -g ————让nodejs支持ts
类型
- 参数类型
- 在参数名称后面后面使用冒号来指定参数的类型
- 默认参数
- 在参数声明后面用等号来指定参数的默认值
- 可选参数
- 在方法的参数声明后面用问号来标明此参数为可选参数
参数类型var a:any //任何类型var b:number //数字类型var c:boolean // 布尔类型function test():void{} //不能用任何返回值
在哪声明类型var a:string //在变量中声明类型function a():string //在方法(函数)中声明返回值类型function a(name:string) 在参数中声明类型 调用的时候用a("字符串调用")默认参数function test(a:string, b, c:string="asd") { //默认参数一定要放在最后面 console.log(a) console.log(b) console.log(c)}test('aaa', 'bbb', 'ccc')test('aaa', 'bbb')可选参数function test(a:string, b?:string, c:string="asd") { //可选参数一定要放在最后面 console.log(a) console.log(b) console.log(c)}test('aaa')-
推断机制
var a=123 // 第一次推断a为数字类型a='abc' //错误,类型转换
//数值转字符串let num: number = 123123let str: string = num.toString()console.log(typeof str, str)//字符串转数值let str2: string = '123321'let num2: number = parseInt(str2)console.log(typeof num2, num2)// 对象转字符串let obj:object={'name':'jey','age':'16','id':13212}let str3:string=JSON.stringify(obj)console.log(typeof str,str3)// 字符串转对象var obj2:object=JSON.parse(str3)console.log(typeof obj2,obj2)函数新特性
-
Rest and Spread 操作符 (…args)
- 用来声明任意数量的方法参数
- 主要用于:把任意长度的数组转化成一个固定数量参数方法的调用
function test(...arg) { console.log(arg)}test(1,2,3)-
generator 函数
- 控制函数的执行过程,手工暂停和恢复代码执行
- 使用.next()方法调用执行下一个yield
- 每个.next()将执行函数内部yield断点
function* doSomething() { console.log('start') yield console.log('finish')}var func1 = doSomething()
document.querySelector('html').onclick = function () { func1.next()}-
destructuring 析构表达式
- 通过表达式将对象或数组拆解成任意数量的变量
把对象里的值才出来放到本地变量里function test(){ return { a: 111, b: 'abc', c: { c1: 'c1c1c1', c2: 'c2c2c2' } }}var { a, b, c: { c2 } } = test()console.log(a,b,c2)
把数组里的值拆分成变量放到本地var arr = [1, 2, 3, 4, 5, 6, 7]var [num1, ,num2, ...other] = arrconsole.log(num1,num2,other)表达式和循环
-
箭头函数
- 用来声明匿名函数,消除传统匿名函数的this指针问题
var sum = (arg1, arg2) => arg1 + arg2 //方法里面只有一行是不用写大括号和return关键字var sum= arg1 => console.log(arg1) //只有一个参数的话不需要括号var sum= () => console.log('没有尝试不') //不需要参数用()表示
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]console.log(arr.filter(value=>value%2==0)) //最常见的用法-
for of
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9,'test']arr.attribute = '我是属性'for (var n of arr) { if (n>3) break //与for in区别在于循环可以中断 console.log(n)}
还可以用在字符串上for (n of '你好呀,jey') { console.log(n)}面向对象
-
控制符
- public 公有(默认)
- private 私有,只能在类的内部访问
- protectes 受保护,可以在类的内部和子类访问
-
接口————interface //低配版的类,这是做一个约束
-
声明类的静态属性————static
-
类
- 把类当做接口使用,类是高配版的接口
-
constructor方法
- 只有new实例化的时候类里面的constructor方法才会被调用,没实例化一次则调用一次
- 子类构造函数必须调用父类构造函数,用super来调用
- 可以在参数加public声明属性,用this调用
class person{ constructor(public name) { } //可以这样写声明一个name属性 say() { console.log(this.name) }}var a=new person('jey')-
继承extends
- 要求:继承一个类的时候必须在constructor方法里面加super()
模块
export 暴露属性,方法,类 import 引入属性,方法,类