Typescript介绍

一、Typescript 介绍

1、Typescript 是由微软开发的一款开源的编程语言,它很像Javascript的超集,遵循最新的ES6、ES5规范,扩展了JavaScript的语法。

2、谷歌也再大力支持TypeScript的推广,谷歌也在大力支持TypeScript的推广,谷歌的angular2.x++就是基于Typescript语法

3、最新的Vue、React也可以集成Typescript,Node.js框架Nestjs、midway中用的就是Typescript语法。

总结:ES5 -> ES6 -> Typescript,也就是说TypeScript包含了js的所有系列,目前前端的必备知识就是Ts。

 

二、Typescript 安装

  • npm install -g typescript
  • cnpm install -g typescript
  • yarn global add typescript

如果电脑上没有安装的cnpm,请先安装cnpm:  npm install -g cnpm --registry=https://registry.npm.taobao.org;

如果电脑上面没有安装过yarn请先安装yarn:  cnpm install -g yarn

通过vscode新建一个index.ts文件:

console.log("你好ts")
// ts 编译城 es5: tsc index.ts -> index.js

var str:string = "你好ts"  // 创建一个变量str,类型为string
// 我们只有在终端输入:tsc index.ts 才能生成js文件,而不能自动生成js文件

let num:any = "123"

  通过执行tsc index.ts 会生成对应的js文件,如何自动编译成es5的文件?

Typescript 开发工具 vscode自动编译.ts文件

  • 创建tsconfig.json文件,通过在空目录下的终端输入: tcs --init,之后会出现一个tsconfig.json文件
  • 在生成的json文件中,打开 "outDir": "./js", 配置,表示通过ts生成的js文件放在js目录中
  • 点击vscode菜单栏中的Terminal -> Run task -> typescript -> watch tsc;表示自动监视ts文件,只要保存就生成js文件到js目录中

 

Typescript 中的数据类型

Typescript为了使得编写的代码更加规范,更加便于维护,为我们增加了数据类型:

  • 布尔类型(boolean)
  • 数字类型 (number)
  • 字符串类型(string)
  • 数组类型(array)
  • 元组类型(tuple)
  • 枚举类型(enum)
  • 任意类型(any)
  • null 和undefined
  • void类型
  • never类型
    // 布尔类型,只能是true/false
    var flag:boolean= true
    flag = false
    
    // 数值类型, 整型和浮点型都是数值类型
    var a:number = 123
    a=12.2
    console.log(a)
    
    // 字符串类型
    var str:string = "this is ts"
    console.log(str)
    
    // 数组类型 第一种定义方式,yies5中定义数组:var arr = [1,"123"]
    let arr:number[] =[1,2,3,3.4] // 只能是数值
    let arr1:string[] = ["php",'js','golang']
    
    // 第二种定义数组的方式,使用范型
    let arr2:Array<number> = [1,3,4]
    
    // 元组类型,属于数组,不过要指定好每个元素的类型
    let tup:[string,number,boolean] = ["ts",2,false]
    
    // 枚举类型
    enum Falg {   // 定义一个enum类型
        success=1,
        error=-1
    }
    
    var f:Falg = Falg.success  
    console.log(f)  // 1
    
    // 枚举官方案例
    enum Color{
        red,
        blue,
        orange
    }
    
    var c:Color = Color.blue
    console.log(c) // 索引值1,使用默认值
    
    // 任意类型
    var num:any = 123
    num="12x"
    console.log(num)
    
    // 任意类型案例,假设html中有一个dom的id为app
    var obox:any = document.getElementById('app');
    obox.style.color = 'red';
    
    // null 和 undefined
    var nums:number | undefined
    console.log(nums) // 定义类未赋值则为undefined
    
    nums =11
    console.log(nums)
    
    // void类型:typescript中的void表示没有任何类型,一般用于定义方法的时候没有返回值
    function run() {  // es5的语法
        console.log('run')
    }
    run();
    
    function run_ts():void {  // 表示方法不返回任何数据类型
        console.log("run ts....")
    }
    run_ts();
    
    function run_num():number{
        return 3
    }
    run_num();
    
    
    // never类型:是其他类型(包括 null和undefined)的子类型,代表从不会出现的值。
    
    var b:undefined
    b=undefined  // 只能是undefined
    
    var c1:never
    c1 = (() => {
        throw new Error("错误")
    })()
    console.log(c1)  

 

Typescript的函数

关于Typescript的函数相关代码讲解如下:

/* es5中的函数定义两种方法
// 函数声明发
function run() {
    return ''
}

// 匿名函数
var run2 = function(){
    reutrn 'run2'
}
*/

// ts中定义的函数方法
// 函数声明法
function run():string {
    return 'run1'
}

// 匿名函数
var fun2 = function():number{
    return 3
}

alert(fun2())

// ts中定义方法传参
function getInfo(name:string,age:number):string{
    return `${name}---${age}`
}

alert(getInfo('wangwu',5))

// 匿名函数
var getInfo2 = function(name:string,age:number):string{
    return `${name}--${age}`
}

// 传参的可选择性,通过?,注意可选参数必须靠后
function getInfo3(name:string,age?:number):string{
    if (age){
        return `${name}---${age}`
    } else {
        return  `${name}---年龄保密`
    }
}

alert(getInfo3("wangx"))

// 默认参数,在es5中无法设置默认参数,es6和ts可以
function getInfo4(name:string,age:number=20):string{
    if (age){
        return `${name}---${age}`
    } else {
        return  `${name}---年龄保密`
    }
}

alert(getInfo4("wangx"))

// 剩余参数,
function sum(a:number,b:number,c:number):number {  // 写法很冗余
    return a+b+c;
}
alert(sum(1,2,3))

// 使用三点运算符打散
function sum1(a:number,...result:number[]):number {  // a会接受第一个,其余的给result
    var sum = 0;
    for (var i=0; i<result.length;i++){
        sum += result[i];
    }
    return sum
}

alert(sum1(1,2,4))


// 函数的重载,重载指的是两个或两个以上的同名函数,但它们的参数不一定,这时会出现函数的重载情况,在ts中通过为
// 同一个函数类型定义来试下多种功能的目的,(同名函数,根据传入的参数不同而执行不同的功能)
// 在es5中出现两个重名方法,则下面的会覆盖上面的方法

// ts中的重载
function getInfo5(name:string):string;
function getInfo5(age:number):string;
function getInfo5(str:any):any{   // 类似于多态
    if (typeof str === 'string'){
        return '我叫'+ str
    } else {
        return '我的年纪是:'+ str
    }
}

alert(getInfo5("zhangsan"))
alert(getInfo5(5))

// es6的箭头函数,this指向上下文
setTimeout(()=>{
    alert('run')
},3000)

   

posted @ 2020-05-11 16:45  独角兕大王  阅读(297)  评论(0)    收藏  举报