day16

一、typescript

1.官网

https://www.tslang.cn/

2.简介

TypeScript是微软开发的一个开源的编程语言,通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统

3.安装

npm i typescript -g

测试是否安装成功

tsc -v

4.编译

(1)手动编译

在指定目录下创建一个index.ts文件,在命令行中进入到这个目录下,执行命令

tsc index.ts

执行完成后会在当前目录下自动的生成一个同名.js文件

(2)自动编译-vscode

①创建一个名称为ts-demo的文件夹,并且在改文件夹下创建一个index.ts文件

②在命令行中,进入到ts-demo目录下,执行初始化命令

tsc --init

生成tsconfig配置文件

修改其中的outDir选项,把注释解开,改为./js

③在vscode的任务栏中找到 终端>运行生成任务>监视tsconfig.json

这样在ts文件中编写代码,就会自动在js目录下生成index.js文件了。

5.基本使用

(1)声明变量和变量的数据类型

ts的最大的特点是进行严谨的数据类型验证,要求我们在声明一个变量时,就定义该变量的数据类型,并且赋值的内容必须与指定的类型一致。

var 变量名 : 数据类型名称
var 变量名 : 数据类型名称 = 内容

(2)常见数据类型

string字符串、number数字、boolean布尔值、function函数、object对象、array数组...

(3)在ts声明数组

var 变量名称 : Array<数组元素的数据类型>;

示例代码:

var users : Array<string>;
// users = ['小王',true]//此时数组的成员数据类型如果不是字符串的话,就会出现警告
users = ['张飞','李四']

(4)ts新增的数据类型

①元组

元组是特殊的数组,元组的元素个数和数据类型都必须要预先设置好才能使用

var 变量名 : [ 第一个成员的数据类型,第N成员的数据类型 ]

示例代码:

var arr1 : [ string,number ];
// arr1 = [100,200]//第一个成员的数据类型不匹配
// arr1 = ['100',200,true]//目标只有两个成员,但是现在给了三个成员
arr1 = ['小飞',50]

②枚举

enum 变量名称 { 值1,值N }

示例代码:

enum weeks { '星期一' = 1,'星期二','星期三' }
console.log(weeks.星期三)

枚举中成员的默认下标是0

③any

任意类型

示例代码:

var info : any;
info = 10
info = '小张'
var arr2 : Array<any>
arr2 = ['张飞',100,true]

④void

void表示函数没有返回值

⑤never

表示那些永远不存在的数据类型

6.函数

ts中的函数和es6中有很多相同之处

(1)函数的声明

function 函数名称() : 函数的返回值类型{ ... }

示例代码:

function say() : void{
  console.log('func say...')
}
say();

(2)函数的参数

①默认参数

function add(num1 :number,num2:number = 100 ) : number{
  return num1 + num2;
}
// console.log(add(100,50));
console.log(add(60))//此时只传递了一个参数,第二个参数的默认值是100
console.log(add(60,60))//传递了两个参数,第二个参数的值是60

②可选参数

function dologin(username:string,password?:string) :void {
  console.log(username)
  console.log(password)
}
dologin('user01','1111')
// dologin('user01')//此时第二个参数是可选的,如果没有传递则是undefined

③剩余参数

function getStr(str1 : string,...str2:Array<any>) : void{
  console.log(str1)
  console.log(str2)
}
getStr('abc','def','ghj',100,true,{username:'小飞'})

第一个参数会被一个形参接收到,剩下所有的参数都会被第二个参数接收到,并把每一个实参作为数组的成员。

7.接口

interface,起约束作用,可以把声明好的接口当成数据类型使用。

示例代码:

//声明接口
interface Person{
  name : string,
  phone : number
}
//使用接口
var user1 : Person;
user1 = {
  name : '小王',
  phone : 15511112222
}

8.装饰器

装饰器是一种特殊的类型声明,它可以附加到类、属性、方法、参数上,用来修饰它们默认属性、行为。

装饰器可以说一个特殊的函数。

类装饰器、属性装饰器、方法装饰器、参数装饰器

装饰器它也是es7的标准特性之一

要使用装饰器的话,需要把tsconfig.json中的"experimentalDecorators": true启用

(1)类装饰器

在类的外部,改变类的行为(属性和方法)

①普通装饰器

声明装饰器

function logClass(target : any):void{
  target.prototype.name = '千里马'
}

声明一个类,并调用装饰器

@logClass
class Animal{}
var d1 = new Animal()
console.log(d1)

在声明类之前,通过@符号和装饰器名称来调用装饰器

②装饰器工厂

如果需要在调用装饰器时,传递额外的参数来影响类的行为

function logClass(params:any){
  return function(target:any){
      target.prototype.name = params;
  }
}
//使用装饰器(注入)
@logClass('汗血宝马')
class Animal{}
var d1 = new Animal();
console.log(d1)

(2)属性装饰器

声明属性装饰器

function logProperty(target:any,propertyName:any){
  console.log(target,1111)
  console.log(propertyName,2222)
}

使用装饰器

class Animal{
  @logProperty
  type:string = ''
}

属性装饰器的第一个参数是类的构造函数,第二个参数是属性名称

(3)方法装饰器

声明方法装饰器

function logAction(target:any,methodName:any,desc:any){
  console.log(target,1111)
  console.log(methodName,2222)
  console.log(desc,3333)
}

调用方法装饰器

class Animal{
  @logAction
  eat():void{
      console.log('eating...')
  }
}

方法装饰器可以接收三个参数:

  • 第一个参数是方法所在的类的构造函数

  • 第二个参数是方法名称

  • 第三个参数是方法权限的描述

(4)参数装饰器

声明装饰器

function logParams(target:any,methodName:any,paramsIndex:number){
  console.log(target,1111)
  console.log(methodName,2222)
  console.log(paramsIndex,3333)
}

调用装饰器

class Animal{
  eat(num:number,@logParams type:string):void{
      console.log('eating...')
  }
}

参数装饰器可以接收三个参数:

  • 第一个参数是所在的类的构造函数

  • 第二个参数是所在的函数名称

  • 第三个参数是参数的索引位置

posted @ 2021-01-26 23:55  安亦辰00  阅读(89)  评论(0)    收藏  举报