美文网首页
ts初级入门系列

ts初级入门系列

作者: 废弃的种子 | 来源:发表于2020-05-03 22:52 被阅读0次

tslang

安装

使用方式1

需要node.js环境,npm install -g ts
tsc -v 查看ts的版本;tsc index.ts编译成index.js文件
*自动编译成js

根目录下tsc --init自动tsconfig.json, image.png
如此编译后的ts文件在js文件目录,更多请看tsconfig.json配置详解

使用方式2

npm install -g typescript
npm install -g ts-node
ts-node  demo.ts

数据类型

// ts中的10个数据类型
/*
    布尔(boolean)
    数字
    字符串
    数组
    元组(tuple)
    枚举(enum)
    任意(any)
    null和undefined
    void类型
    never类型

*/
var bool:boolean=true;
console.log(bool)
var nums:number=123;
console.log(nums);
var str:string="我是字符串类型";
console.log(str);
// 数组的两种定义方式
var arr:number[]=[12334,324];
console.log("第一种数组方式:",arr)
var arr1:Array<number>=[123]
console.log("第二种数组方式:",arr1)
//数组中的元组(为数组中得到每一个数,声明类型)
var arr2:[number,string]=[12,"str"];
console.log(arr2);
// 枚举
//数字枚举(有自增,有反向映射)
enum color{red=1,blue=2,success=4,error=3}
console.log(color)
//反向映射如:{1: "red", 2: "blue", 3: "error", 4: "success", red: 1, blue: 2, success: 4, error: 3}

console.log(color.blue)//都没有赋值,访问的是下标,某一个没有赋值,访问的是之前的数+1
//异构枚举
enum Person {
    name = 1,
    love = 'LOVE',
    age = 2,
    hobby = 'HOBBY'
  }
  console.log(Person)
  //字符串枚举 (无反向映射)
  enum Person1 {
    name = 'NAME',
    age = 'AGE',
    love = 'LOVE',
    hobby = 'HOBBY'
  }
  console.log(Person1)
//   任意类型
var renyi:any=[12,"234"];
console.log(renyi)
// never类型  表示从来不能能出现的类型
// var xx:never;
// xx=(()=>{
//  var aa:any= new Error("异常")
// throw aa;
// // throw  aa.name;
// })();
 

函数

// 函数的定义 2种
function run1():number{
  return 213123;
}
console.log(run1())

var run2=function():number{
return 123;
}
console.log(run2())

//函数中的参数问题
// 1、ts中形参的个数必须和实参数量一直,这里出现一个可选参数?
function run3(name:string,age?:number):void{
  if(age){
    console.log(age)
  }else{
    console.log(name)
  }
}
run3("李木子");
 
// 2、默认参数


// 3、剩余参数

// 4、函数的重载
//  两个及两个以上的同名函数,参数个数不同,类型不同,即不同的参数执行不同的方法
 // 上边是声明
function add (arg1: string, arg2?: string): string
function add (arg1: number, arg2: number): number
// 因为我们在下边有具体函数的实现,所以这里并不需要添加 declare 关键字

// 下边是实现
function add (arg1: string | number, arg2?: string | number) {
  // 在实现上我们要注意严格判断两个参数的类型是否相等,而不能简单的写一个 arg1 + arg2
  if (typeof arg1 === 'string' && typeof arg2 === 'string') {
    console.log(1)
    return arg1 + arg2
  } else if (typeof arg1 === 'number' && typeof arg2 === 'number') {
    console.log(2)
    return arg1 + arg2
  }
}
add("1")

es5中的类和继承

//es5中的类额和继承
//原型继承和对象的冒充
//构造函数1
function Persion(name,age){
    this.name=name;
    this.age=age;
    this.runs=function(){
        console.log("es5的构造方法");
    }
}
//原型继承
Persion.prototype.names="原型的names";
Persion.prototype.fnss=function(){
    console.log("原型继承的names方法")
}
// 静态方法
Persion.fns=function(){
    console.log("我是es5中的静态方法")
}
// new Persion().fnss()
// Persion.fns()
//构造函数2
function web(value,index,age){
    this.value=value+1;
    this.index=index+1;
    //对象额冒充继承
    Persion.call(this,name,age);//继承persion 并且可以给构造函数传参,缺点是无法继承父类原型上的方法和静态方法,只能继承构造函数中
}

let w=new web("李四",1,12);
w.runs()
//原型继承可以调用构造函数也可以使用父类的原型但是,不能给父类传参,所以采用组合的方式继承;
web.prototype=Persion.prototype;
let w2=new web("李四",1,12);
 w2.fnss();
 console.log(w2.names);
 //静态方法不能被继承

es6中的类和继承

//  es6中的类和继承

class myclass{
    constructor(name,age){
        this.name=name+1;
        this.age=age;
    }
    //方法
    getInfos(){
        console.log("es6的构造函数方法")
    }
    //静态方法
    static infos(){
        console.log("es6的静态方法")
    }
}
 myclass.prototype.names="es6原型names";
 myclass.prototype.fnes6=function(){
     console.log("es6原型链上的方法")
 }
// 第二个类实现继承
class myclass2 extends myclass{
    constructor(name,age,index){
        super(name,age)/*实例化子类的时候把子类的数据传给父类*/
        // super指向的是当前对象的原型对象 指向父类
        this.index=index;
    }
}
let es6=new myclass2("name",12,"index")
console.log(es6.names)
es6.getInfos()
 console.log(es6.name)

ts中的类和继承

//typescript 类的定义和使用

class TsPersion{
    name:string;
    constructor(name:string){
        this.name=name;
    }
    getnames():string{
         return this.name;
    }
    static sd(){
        console.log("sd")
    }
}
let p1=new TsPersion("李三");
console.log(p1.getnames());
 
// ts类的继承

class persion2 extends TsPersion{
    constructor(name:string){
        super(name);
    }
}
let p2=new persion2("李四");
console.log(p2.name,)

// ts类的修饰符
//  public   不写,默认是public,任意类都可访问
//  private    私有属性,只在当前类可以访问
//  protected   当前 类及其子类可以访问,外部不可访问(包括)

class protectPersion{
   protected  name:string;
    constructor(name:string){
        this.name=name;
    }
    getname(){
        console.log(this.name);
    }
}
 
let protects=new protectPersion("保护的名字");
console.log(protects.name);//报错 ,name只在当前的类里边使用
console.log(protects.getname());//使用当前类的name 属性

//ts 类的静态属性和静态方法、抽象类和多态
class Person{
    static sex="男";
    constructor(sex:string){
        //静态属性
        Person.sex=sex;
    }
    static   fnPerson(){
        //静态方法只能调用静态属性
        console.log(Person.sex);
    }
}
Person.fnPerson();
//

相关文章

网友评论

      本文标题:ts初级入门系列

      本文链接:https://www.haomeiwen.com/subject/idhsghtx.html