typescript入门学习

226 阅读4分钟

1.typescript了解,配置等;

vue create <project name> 文件名不支持驼峰写法
Manually select features 手动配置
 ( ) Babel 转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。     
 ( ) TypeScript// TypeScript是一个JavaScript(后缀.js)的超集(后缀.ts)包含并扩展了 JavaScript 的语法,需要被编译输出为 JavaScript在浏览器运行,目前较少人再用
 ( ) Progressive Web App (PWA) Support// 渐进式Web应用程序
 ( ) Router                           // vue-router(vue路由)
 ( ) Vuex                             // vuex(vue的状态管理模式)
 ( ) CSS Pre-processors               // CSS 预处理器(如:less、sass)
 ( ) Linter / Formatter               // 代码风格检查和格式化(如:ESlint)
 ( ) Unit Testing                     // 单元测试(unit tests)
 ( ) E2E Testing                      // e2e(end to end) 测试

2.typescript中的数据类型

1-1:typescript中的数据类型好处:使编写代码更规范,便于维护,增加类型验证;

typescript的数据类型分为:
布尔类型:boolean
数字类型:number
字符串类型:string
数组类型:array
元素类型:tuple
枚举类型:enum
任意类型:any
null和undefined
void类型
never类型


例子:
<!--1.字符串类型-->
// es5中(正常) ts中错误
let a = false
a = 12233
//ts 写法:
let a:boolean = true
a = false

<!--2.数组类型-->
// 数组类型。ts中定义数组两种方式
 // 第一种方式:
   let arry:number[] = [12,4]//定义的数组中的类型都是number类型
 // 第二种:
  let  arry:Array<number> = [2,34]// 数组中的类型都是数字类型;

<!--3.元组类型(属于数组的类型,定义数组中多种类型)-->
let arry:[number,string] = [1,2,'2']

<!--4.枚举类型-->
// 用自然语言中含义清除的单词来代表它的每一个值

    enum 枚举名:{
        标识符[整型常数]
         标识符[整型常数]
          标识符[整型常数]
          ...
    }
    enum Flag:{
        sucess: 1,
        error: 2
    }
    let s:Flag = Flag.sucess;// s的类型是Flag类型,值是sucess,
                             // 如果sucess没有赋值,默认取的是下标;

<!--5.any类型(任意类型)-->
  let str:any = 'any'
  str = 23;
  
  <!--6.null和undefined-->
  // 其他(never)类型的子类型
  var num:number;
  console.log(num)// 报错
  
  var num2:undefined;
  console.log(num2)//正常
  
  var num3:number|undefine;
  console.log(num3)// 正常
  
  <!--7.void类型-->
  typescript中的void表示没有任何类型,一般用于定义方法的时候没有返回值
  
  // 这个方法没有任何值
  function run():void{
      // ....
  }
  // 有返回值,指定返回的类型;
   function run2():number{
      return 123
  }
  
  <!--8.never类型-->
  是其他类型(包含null和undefined)的子类新,代表从不会出现的值;
  这意味着声明never的变量只能被never类型所赋值;
  let a:never
  a = 12//error
  a= (() => {
      throw new Error('error')// sucess 
  })
  

3.typescript 函数的定义

// es5函数声明
function run(){}
// 函数表达式
let run2 = function () {}

// ts函数声明
1).第一种函数声明:
function run():string {// 有返回值函数指定了string类型,返回值必须是string;
    return '12344'
}
run()
2).第二种匿名函数
let fun2 = function():number{
    return 1234;
}
3).ts中定义方法的传参数
function getInfo(name:string,age:number):string{// 有参数类型和返回值的类型
    return `${name}+${age}`
}
getInfo('info',12)
4).ts函数的可选参数
// es5里面方法实参和形参可以不一样
// 但是ts中必须一样,如果比一样就需要配置可选参数
// ?代表可选参数(必须配置到实参的前面)
function getInfo(name:string,age?:number):string{
  if (age) {
      console.log(age)
  } else {
      console.log(name)
  }
}
5).ts默认参数
function getInfo(name:string,age:number = 20):string{
}
console.log(getInfo('xiao li'))
6).剩余参数
function sum (..arg:number[]):number{
}
sum(1,2,34,5,6)
7).ts函数重载
typescript中的重载,通过为一个函数提供多个函数类型定义来试下多种功能的目的;
function getInfo (name:string);
function getInfo(age:number);
function getInfo(str:any):any{
    if (typeof str == 'string') {
        // 执行第一个函数
        ....
    } else {
        // number执行第二个函数
        ...
    }
}

####4.typescript中的类
> 

class Person{ name:string; constructor (name:string) {// 构造函数,实例化触发的方法 this.anme = name } run ():void { console.log('000) } } let p = new Person('xiao li')

// 1.ts 实现继承 extends super

// 2.ts 类的修饰符 定义属性的时候我们提供了三种

public:默认值,共有的,属性可以在当前类和字类和类的外面都可以访问; protected:保护类型,在当前类和子类里面可以访问; private:私有的,只能在当前类的里面访问;

// 3.静态属性 静态方法

class Person { name:string; static sex="man" constructor (name:string) { this.name = name } static print() {// 静态方法,没有方法直接调用类里面的方法; console.log(this.name)//error console.log(Person.sex) } } // 调用类的静态属性和方法 Person.priint() Person.sex

// ts 类的多态

多态:父类定义的方法不去实现,让继承它的字类取实现,每一个子类有不同的表现,多态属于继承;