TypeScript和es5的JavaScript的语法比较

1.变量(基础类型和定义)

typescript定义变量需要指定变量的类型,后面不许更改变量的类型

1>定义

let 和 var 和const的区别

let定义的变量只在作用域中起作用,出来作用域就会被销毁
var在指定作用域中起作用
比如:都在函数中定义for循环,let只能在for循环中使用,var可以在整个函数中使用
const 定义的变量不可以修改值,是一个常量

2>基础类型
//Boolean
let isDone: boolean = false;

//number
let decLiteral: number = 6;

//string
let name: string = "bob";

//对象Object
let info:Object = {};

//数组Array<元素类型>或number[]
let list: Array<number> = [1, 2, 3];
let list: number[] = [1, 2, 3];

//元组---个数类型,位置都确定
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error


//枚举enum
//不给赋值的话一般从0开始,赋值了,之后的元素对应值,接在后面递增
//把枚举的名字变成值
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;//2

//由枚举的值得到它的名字
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];

//Any
let notSure: any = 4;
let tts:Array<any> = [1,"2",new Date()];

//函数
//规定返回值类型为number
function run1():number{
    return 1;
}
//没有返回值,
function run3(name:string,age?:number):void{
//age这个参数可传可不传
}

//function run():never{}一般是死循环等永远拿不到的值

//类型断言
let someValue: any = "this is a string";
//尖括号”语法:
let strLength: number = (<string>someValue).length;
//as语法
let strLength: number = (someValue as string).length;

//高级类型
//|交叉类型,可以是str也可以是num
function test2():string|number{
    return 123;
}

//&联合类型




2.类

1>类的创建

class Person{
    name:string;
    constructor(){
        this.name = "xiaoming";
    }
    open(){
        console.log("Person.open()");
    }
}

//es5
function Person(){
    this.name = "xiaoming";
    this.open = function(){
        console.log("Person.open()");
    }
}
2>公共,私有与受保护的修饰符

a)public默认,公开,可以在继承了父类的子类内部使用,外部也可以访问
b)protected是只要自己和子类的内部就可以访问,外部不可访问
c)private私有的,只有自己才能访问,子类内部都不可以访问
一般通过存储器来设置,使用某些私有属性

//protected
class Chinese{
    constructor(){}
    protected action(type:number){
        let deng ="red";
        let actionType = "Stop";
        switch (type){
            case 0:
                break;
            case 1:
                deng = "green";
                actionType = "go";
                break;
            case 2:
                deng = "yellow";
                actionType = "go";
                break;
            default :
                deng = "black";
                actionType = "go";
                break;
        }
        console.log("灯的颜色是"+deng+"意思是 "+actionType);
    }
    red(){this.action(0);}
    green(){this.action(1);}
    yellow(){this.action(2);}
}
//假如西安比其他地方多一个黑的等
class Xian extends Chinese{
    static CityName = "xian";//静态属性,和类属性差不多

    constructor(){super();}
    black(){
        this.action(3)
    }
}




//private
class Person{
    private name:string = "";
    protected age:number = 8;

     /*
    //es5set,get方法
    var _name = "";
    this.getName = function(){
        return _name
    }
    this.setName = function(){
    _name = name;
    }*/

    get getName(){
        if(this.age>30){}
        return this.name;
    }
    set setName(name:string){
        this.name = name;
    }
}
class  China extends Person{
    constructor(){
        super();
    }
    move(){
       // console.log(this.age+this.name);//protect类可以在子类里使用,所以this.age可以,name不行
        console.log("年龄是"+this.age+this.getName);//存储器直接当做属性一样使用

    }
}

3.继承

class Animal{
    blood:number;
    att:number;
    level:number;
    constructor(blood:number,att:number,level:number){
        this.blood = blood;
        this.att = att;
        this.level = level;
    }
}

class Person extends Animal{
    name:string;
    job:string;            constructor(blood:number,att:number,level:number,name:string,job:string){
        super(blood,att,level);
        this.name = name;
        this.job = job;
    }

}

//es5
//多重继承
//混合继承

4.命名空间和模块

注意:不应该对模块使用命名空间
使用命名空间是为了提供逻辑分组和避免命名冲突。 模块文件本身已经是一个逻辑分组,并且它的名字是由导入这个模块的代码指定,所以没有必要为导出的对象增加额外的模块层。

module flower{
    //导出flower模块中的Rose类
    export class Rose{
        constructor(){}
        open(){
            console.log("a beautify Rose");
        }
    }
}

//在其他文件中使用Rose的open方法
new flower.Rose().open();


//命名空间
namespace hxx{
    //导出命名空间里的内容
    export let name ="hxx";

}

//使用
console.log(hxx.name);

5.基础类

基础类不可实例化,只有继承了基础类的子类可以实例化(BMap的时候见了些)

abstract class DBManagerBase{
    private dbName:"ST"
    constructor(){}
    opration(){
        console.log("opration");
    }
}

class DBManager extends DBManagerBase{
    constructor(){
        super();
    }
}
new DBManager().opration();
new DBManagerBase();//Error,基础类不可实例化,只有继承了基础类的子类可以实例化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值