typescript

171 阅读3分钟

01 typescript环境安装与运行

需要安装 node 和 npm

全局安装typescript : npm install -g typescript

校验: tsc -v

tsc的作用: 负责将ts代码转化为 浏览器 和 node 识别的js代码

创建ts文件并编译js

tsc ./01test.ts 会生成一个 01test.js文件

设置vscode自动编译

  1. 运行 tsc --init 创建tsconfig.json文件

  2. 修改 tsconfig.json 文件,设置js文件夹: 'outDir':'./js/'

  3. 设置 cscode 监视任务

02 typescript 变量与数据类型

变量的语法:

js: let 变量名 = 值;

ts: let 变量名:变量类型 = 值;

在ts中,为变量指定了类型,就只能给这个变量设置相同类型的值

let dName:string = 'Ruikey';
dName = 520;
//报错:Type '520' is not assginable to type 'string'
数据类型
常见数据类型
//字符串 '' `` ""
let aName:string = '貂蝉';

//数值
let dAge:number = 18;
dAge = 18.13;

//布尔值 true/false  不能使用0、1
let isSingleDog = true;
isSingleDog = false;

//undefined 和 unll
let undef:undefined = undefined;
let nul:null = null;

//数组  元素类型固定 但是长度不限制
//方式1
let arrHeros:string[] = ['安其拉','亚索','盲僧']
//方式2
let arrAge:Array<number> = [18,19,20]

//元组  规定了元素数量和每个元素类型的数组
let tup1:[string,number,boolean] = ['亚索',18,false];
//元组出现的目的:ts中数组原型类型必须一致,如果需要不同的元素,就要使用元组 , 元组声明时必须指定个数和类型,也可以用下标和length

//枚举  一组标识
//例子  创建性别枚举
enum Gender{
  Boy = 1,
  Girl = 2,
  UnKnown = 3
}
console.log(Gender.Boy) //1
console.log(Gender.Girl)   //2
console.log(Gender.Unknown)  //3

enum Gender2{
  Boy,
  Gril,
  unKnown
}
console.log(Gender2.Boy)  //0
console.log(Gender2.Gril)  //1
console.log(Gender2.unKnown)  //2

//使用性别枚举
let userSex:Gender = Gender.Boy
if(userSex == Gender.Boy){
   console.log('是男生')
}else if(userSex == Gender.gril){
   console.log('是女生')
}else{
  console.log('我也不知道)
}
any

any代表任意类型,一般用在获取dom时使用,在接收用户输入或第三方代码库的时候,不确定返回什么类型的值,也可以使用

 let textName : any = document.getElementById('txtN')
void

表示没有类型,一般用在无返回值的函数

function sayHi():string{
  return  'hi,你好';
}
let re1 = sayHi()

function sayHi2():void{
   console.log("可以不用return值")
}
never

表示不存在的值,常用作抛出错误或无线循环的函数返回类型

never类型是ts中的底部类型,所有类型都是never类型的父类,所以never类型值可以赋给任意类型的变量

//无线循环
function test():never{
   while(true){
   
   }
}
//抛出错误
function test2():never{
    throw new Error("出现错误")
}

//可以赋给任意类型的变量
let x:never = test2()
let y:string = test2()
类型判断

概念:如果变量的声明和初始化是在同一行,可以省略掉变量类型的声明

let 变量名:变量类型 = 值;
//也可以写成
let 变量名 = 值;

验证: let age = 18 此时变量age的类型被推断为 number

age = 'jack' 报错,因为变量age 的类型是number

联合类型

概念: 表示值可以为多种类型中的一种

let 变量名:变量类型1 | 变量类型2 = 值;

接收prompt() 函数的返回值 或者是用户的输入或者是null

let dName:string | null = prompt("请输入用户名");
console.log('hello' + dName);

函数

函数返回值类型
function sayHi():string{
  return  'hi~~~'
}
let resl:string = sayHi()
函数形参类型
function jumpSan(cityName:string):void{
  console.log(`跳伞跳 ${cityName} `)
}

ts中 实参 和 形参 的类型必须一样

ts中 实参 和 形参 的数量必须一致

函数可选参数
function 函数名(形参 ?: 类型):返回值类型{
   //问号 ? 就表示参数的实参可传可不传
}

//调用
函数名()  //不传递实参
函数名(实参)  //传递实参
函数默认值
function 函数名(形参1 : 类型 = 默认值1 , 形参2 : 类型 = 默认值2):返回值类型{

}

//调用
函数名()         //不传递实参   编译后  函数名(默认值1,默认值2)
函数名(实参1//传一个实参 编译后  函数名(实参1,默认值2)
函数名(实参1,实参2//传两个实参  编译后  函数名(实参1,实参2)
函数名(undefined,实参2//只传第二个实参   函数名(默认值1,实参2)
函数剩余参数
function add(a : number , b : number):void{
   coaole.log(a+b)
   //如果参数的数量不确定
}

funciton add(a:number , b:number , ...c:number[]):void{
  let resNum:number = x + y
  for(let el of c){
    resNum += el
  }
  console.log(resNum)
}

add(1,2)    //3
add(1,2,3,4,5,6)   //21

类的成员变量,构造函数,成员方法

class City{
   cName:string;
   cLevel:number;
   constructor(name:string , level:number){
     this.cName = name;
     this.cLevel = level
   }
   about(){
    console.log(`欢迎来到${this.cName},此地危险系数是${this.level}`)
   }
}