typescript学习笔记

typescript是微软开发的一个javascript的一个超集。支持es6规范。它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。

es是客户端脚本的规范,es5,es6是这些规范的不同版本。JavaScript与typescript是两种客户端脚本语言,JavaScript实现了es5规范,typescript实现了es6规范。

搭建typescript开发环境

NPM 安装 TypeScript:npm install -g typescript

(NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题)

安装完成后我们可以使用 tsc 命令来执行 TypeScript 的相关命令,如查看tsc版本:tsc -v

安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

第一个typescript文件:hello.ts内容如下

export class Hello{}
编译生成js文件并执行
tsc hello.ts
node hello.js

typescript特性:

1.多行字符串:

var a=`sdfasd
fs
adf`

2.字符串新特性:

var myname="aaaa";

var myfunc=function(){

return "ssdsdfsdf";

}

console.log(`<div>

<span>${myname}</span>

<p>${myfunc()}</p>

</div>`);  //注意不是单引号

3.自动拆分字符串

下面例子用字符串模板调用函数

function test(str,name,age){

console.log(str);

console.log(name);

console.log(age);

}

var name1='aaaa';

var getage=function (){

return 22;

}

test`adfasdfsdfs adf${name1}sdf${getage()}sadf`

参数类型的新特性:

声明参数指定类型:var str1: string = "hello";

也可以不声明类型,typescript会自动根据值腿短类型 var str1 = "hello";

可以为变量设置一个any类型,这样这个变量可以设置成任何类型,既可以是字符串也可以是数字

其他常用数据类型实例:

var age: number = 18;
var man: boolean = true;

//设置函数的参数类型及返回值类型
function aaa(name: string, age:number=18): string { 
    return 'sdf';
}

//设置空返回值的函数
function bbb(name: string): void { 
    alert(234);
}

//自定义类型
class Person { 
    name: string;
    age: number;
}
var p1 = new Person();
p1.name = "zhang san";
p1.age = 18;

函数的可选参数与默认值参数:在参数名后面加"?"表示这个参数是可选参数,可选参数与默认值参数都要在必填参数后面

function aaa(name: string,xueli?:string,age:number=18): string { 
    return 'sdf';
}

用Rest and Spread操作符声明任意数量参数的方法:

function func1(...args) { 
    args.forEach(function (arg) { 
        console.log(arg);
    })
}

func1(1, 2, 3);

func1(5,6,7,8,9,3)

//Rest and Spread操作反过来使用(注意目前typescript并不支持这种方法,但是生成的js可以正常使用)

function fun2(a,b,c) { 
    console.log(a);
    console.log(b);
    console.log(c);  
    console.log("==================");  
}

var parame1 = [1, 2];
var parame2 = [3, 4, 5, 6, 7, 8];
fun2(...parame1);
fun2(...parame2);

generator函数:控制函数的执行过程,手工暂停或恢复代码执行

function* aaa() { 
    console.log("aaa");
    yield;
    console.log("bbb");
}

var fun1 = aaa();
fun1.next();
fun1.next();

注意generator函数需要在声明函数的function后面添加*号,使用generator函数时候需要复制给一个变量。需要使用next执行下一步

析构表达式:通过表达式将对象或数组拆解成任意数量的变量

针对对象的析构表达式:

function getdata() { 
    return {
        aaa: "zhang san",
        age: 100,
        zzz: {
            z1: 10,
            z2:20
        },
        yyyy: 888,
        
    }
}

//以前调用方法
var data1 = getdata();
var name1 = data1.aaa;
var age1 = data1.age;
console.log(name1);
console.log(age1);
console.log("====");

//新的获取方式
var { aaa, age } = getdata();
console.log(aaa);
console.log(age);

注意{}中的参数名要和方法名一致,否则需要用下面方法映射下

var { aaa: xxx, age, zzz: {z1}} = getdata();
console.log(xxx);
console.log(age);
console.log(z1);

zzz: {z1}能获取到zi的值

针对数组的析构表达式:

var array1 = [1, 2, 3, 4];
var [num1, num2] = array1;//获取的是1,2
var [,,num3, num4] = array1;//获取的是3,4
var [num5, num6, ...other] = array1; //other是一个数组,里面的值是3,4

var array1 = [1, 2, 3, 4];
function diyfunc([num1,num2,...other]) { 
    console.log(num1);
    console.log(num2);
    console.log(other);
}

diyfunc(array1);

箭头表达式:用来声明匿名函数,消除传统匿名函数的this指针问题

var sum = (arg1, arg2) => arg1 + arg2;

var sum = (arg1, arg2) => {
return arg1 + arg2;
}

var sum = function (arg1, arg2) { return arg1 + arg2; };
上面三种方法是等价的

//无参箭头表达式声明的一个方法
var sum =()=>{
console.log(231123);
}

//只有一个参数的箭头表达式声明的一个方法
var sum =arg1=>{
console.log(arg1);
}

//箭头函数实例:打印数组中的偶数
var myarray = [1, 2, 3, 4, 5, 6];
console.log(myarray.filter(aaa => aaa % 2 == 0));
//filter用于对数组元素进行过滤。

//箭头函数this用法
function bbb(name: string) { 
    this.name = name;
    setTimeout(() => { 
        console.log("name is " + this.name);
    },1000)
}
bbb('aaa');
 

//箭头函数forEach(注意这个不支持break)
var array1 = [1, 2, 3, 4];
array1.forEach(val=>console.log(val));

传统for in以及for of
var array1 = [1, 2, 3, 4];
for (var n in array1) { //n从0开始
    console.log(n+"==="+array1[n]);
}

for (var n of array1) { //n从1开始
    console.log(n+"==="+array1[n]);
}
for of可以适用于对象,数组,字符串等很多地方

typescript类:

class Person { 

    constructor() { //构造方法
        console.log('xxxx');
    }

    public name;
    age

    run() { 
        console.log(this.name+" is running");
    }
}
var p1 = new Person();
p1.name = "zhang san";
p1.run();

实例:

class Person { 

    public name;
    constructor(name:string) { //构造方法
        this.name = name;
    }

    run() { 
        console.log(this.name+" is running");
    }
}
var p1 = new Person('zhang san');
p1.run();

//上面这个实例可以简写为

class Person { 
    constructor(public name:string) { //构造方法
        this.name = name;
    }
    run() { 
        console.log(this.name+" is running");
    }
}
var p1 = new Person('zhang san');
p1.run();

类的继承:

class Person { 
    constructor(public name:string) { //构造方法
        this.name = name;
    }
    eat() { 
        console.log(this.name+" is eat");
    }
    run() { 
        console.log(this.name+" is running");
    }
}

class Employee extends Person{ 
    constructor(name:string,code:string) { 
        //子类声明构造方法必须调用父类的构造方法
        super(name);
    }
    code: string;
    work() { 
        super.eat();
        console.log(this.name+" is working");
    }
}
var e1 = new Employee('xiao li','101');
e1.work();

泛型:参数化的类型,一般用于限制集合的内容

var workers: Array<Person> = [];
workers[0] = new Person("wk1");
workers[2] = new Employee("wk2","102");

接口的两种用法:

接口的继承方法:

interface Animal { 
    run();
}
class Dog implements Animal { 
    run() {//类必须继承接口的方法 
        console.log("eat grass");
    }
}

将接口作为某个类的某个方法参数的验证

interface Person { 
    name: string;
    age: number;
}

class wker{ 
    constructor(public config:Person) { 
        console.log("xxx");
    }
}
var p1 = new wker({
    name: "xing ming",
    age:20
});

模块:可以帮助开发者将代码分割为可重用的单元。一个ts文件就可以看做是一个模块

模块常用的两个关键字:export对外暴露什么方法,import导入某个模块

实例:

a.ts代码:

export var v1;
var v2;
export function func1() { 
}
function func2() { 
}
export class clas1 { 
}
class clas2 { 
}

b.ts代码:引入了a.ts

import {v1,func1,clas1} from "./a";
console.log(v1);
func1();
var aaa = new clas1();

注解:为程序的元素(类,方法,变量)添加更直观的说明,提供给工具或者框架使用的

类型定义文件(xxx.d.ts):帮助开放着在typescript中使用已有的JavaScript的工具,例如jquery

类型定义文件如何获取:

1.访问github/DefinitelyTyped下载

2.npm i typings --global   //下载typings工具并用这个工具进行安装你想要工具

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值