zoukankan      html  css  js  c++  java
  • typescript简介

    微软作为编译器狂魔一直有一个心病,就是改良JavaScript这种语法超级烂又很多人用的编程语言,于是TypeScript诞生了

    先做个对比吧:

      TS JS
    语法严谨性 严谨 宽松
    静态性 静态 动态
    适合开发规模 大型 小型
    支持类型 基本类型、泛型、implements 都不支持

    下面来把ts的特点逐一介绍:

    1.类型

    常见的ts类型:string、number、boolean、undefined、null、void、any、enum、Array、object、Never

    ts引入了类型的限制

    java在声明一个变量的时候大概是这样的:

    int num;

    而为了更贴近js,ts声明变量的写法变成:

    let num:number;

    如果不加冒号声明就自动判定为any类型

    2.枚举类型

    enum枚举类型,是一种自己定义的类型:

    enum Gender {
        male=1,
        female=2
    }
    
    let gender:Gender;
    
    //如果想定义为male
    gender = Gender.male //或者直接为 1

    3.泛型

    <T>泛型,其实就是制定内部东西的类型

    let arr1:Array<number|string>;
    let arr2:Array<number>;
    
    arr1 = [1,2,3,'sadsd'];
    arr2 = [2,4,6,8]

    ps: 其他数组类型写法

    let arr:string[];
    let arr2:[string, number, boolean] //元组
    
    arr = ['123', '456']; // 只能是字符串
    arr2 = ['123', 123, true] // 一定要按顺序和个数严格对应类型声明

    4.预定义属性的类

    enum Gender{male=1,female=2}
    
    class Person {
        age:number;
        gender:Gender;
        constructor(age:number,gender:Gender) {
            this.age = age;
            this.gender = gender
        }
        eat(str) {
            console.log('我吃' + str)
        } 
    }

    Person的属性需要在constructor外先做定义,而且定义了之后不允许像js那种装饰者模式那样再添加新的属性:

    let person = new Person(18, 1)
    
    person.height = 180 //编译报错,说person没有height这个类型

    至于extends和es6没什么区别,接下来要说的是implements

    5.接口/实现

    implements接口(实现)是强制一个class必须要implements的所有属性和方法

    enum Gender{male=1,female=2}
    
    class Person {
        constructor(age:number,gender:Gender) {
            this.age = age;
            this.gender = gender
        }
        age:number;
        gender:Gender;
        eat(str) {
            console.log('我吃' + str)
        } 
    }
    //Adult继承字Person
    class Adult extends Person {
        constructor(age:number, gender:Gender) {
            super(age,gender)
            this.age = 1
        }
        earnMoney(){
            console.log('我赚钱')
        }
    }
    //Hero实现Adult,就必须手动加齐Adult自己新加的属性和方法和Adult继承自Person的属性和方法
    class Hero implements Adult {
        age:number;
        gender:Gender;
        constructor() {
            this.age = Infinity
            this.gender = Gender.male
        }
        earnMoney() {
            console.log('我超级赚钱')
        }
        eat(){
            console.log('我超级吃东西')
        }
    }

    6. 默认参数和可选参数

    function test(name: string = '哈哈', age ?:number) {
        if (age) {
            return name
        }
        return name + age;
    }
    
    test()

    7. 类型断言

    let age:any = '555';
    
    (<string>age).substr(0, 2)
    (age as string).substr(0, 2)
  • 相关阅读:
    骆驼命名法
    tftp服务器最简单安装配置
    debian安装后sudo命令不能用的解决方法
    date,datetime,timestamp 的区别
    Linux修改SSH端口和禁止Root远程登陆
    Linux下TFTP的安装,配置和操作
    Linux中find常见用法示例
    做SEO推广必须要做的9件事儿
    网站数据更新
    数据盘分区及挂载新分区
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8587338.html
Copyright © 2011-2022 走看看