TypeScripet

TypeScript(微软, 趋势)为js提供了静态类型检测的能力

  1. 概念类

    • 概念: JavaScript的超集语言(兼容js语法)

    • 作用: 给js提供了类型系统和ES6的语法支持

    • 与Flow的区别: Flow是类型检查工具, TypeScript是开发语言, 有自己的编译工具, 会最终转换成js

  2. 安装使用

    官网: https://www.tslang.cn/docs/home.html

    安装TS编译器: cnpm i typescript -g

    安装完成, 提供tsc命令使用, 把ts文件转换成js文件 tsc ./index.ts

  3. TS的配置文件

    • 创建tsconfig.json配置文件, tsc --init

    • 设置常用的配置:
      target: 转化后的js是es5模式
      module: 转化后的js模块化方式
      outFile: "outDir": "./dist", 全部转化到dist文件夹下
      rootDir: "rootDir": "./src", 需要转化的是src目录下
      strict: 转化后是否严格模式

TS的数据类型

  1. number类型
  let a: number = 10;
  let b: number = NaN;
  let c: number = infinity;
  // number还可以是八进制 十六进制
  1. string类型
  let str: string = 'abc';
  let str1: string = `这是模板字符串${str}`;
  1. boolean类型
  let flag: boolean = true;
  1. 数组类型
  // number型数组
  let arr: Array<number> = [1, 2];
  // number型数组
  let arr1: number[] = [1, 2, 3]
  1. 元组
  // 允许表示已知元素长度和类型, 两个元素, 第一个元素必须number
  let arr2: [number, string] = []
  // 越界访问时, 第三个元素既可以number也可以是string, 其他不允许
  1. void 空值
  // 可以表示undefined
  let res: void = undefined;
  let res1: undefined = undefined;
  let res2: null = null;
  1. never 类型, 用于不可能有返回值的函数
  const fn = (): never => {
    while (true) {

    }
  }
  1. 对象类型
  let obj: object = {};
  let obj1: object = [];
  let obj2: {name: string, age: number} = {name: 'tt', age: 18};
  1. 枚举类型(enum)
  enum ColorFool {
    red = '红色',
    yellow = '黄色'
  };
  let color: ColorFool = ColorFool.red;
  1. 类型断言
  // 根据length属性, 推断它就一定是number
  let str: any = 'abc';
  // let len: number = str.length;
  let len: number = (<string>str).length;

TS中的类

  1. 类的实现
  class Animal {
    // 和ES6不同, TS属性必须声明类型
    type: string = '动物'
    // 声明好属性之后, 属性必须赋值, 或者在构造函数中进行初始化(上下两种)
    age: number
    constructor (age: number) {
      this.age = age;
    }
    eat () {
      console.log('动物进食')
    }
  }
  1. 类的继承, 跟ES6类似
  class Dog extends Animal {
    name: string
    constructor ( name: string, age: number) {
      // 必须先继承父集的属性
      super(age)
      this.name = name;
    }
    // 子集的eat方法会覆盖父集的eat方法
    eat () {
      console.log('狗狗独有的')
    }
  } 
  1. 类成员的访问修饰符

    • 在类成员前通过添加关键字来设置当前成员的访问权限

      • public 公开, 默认, 都允许访问
      • private 私有, 只能在当前类内部做访问
      • protected 受保护的, 只能在当前类或子类中访问
  enum Color {
    red = '红色',
    yellow = '黄色',
    green = '绿色'
  }
  class Car {
    // public可以任意访问
    public color: Color
    constructor () {
      this.color = Color.red
      // this.run()         // 可以内部访问
      // this.loadPeople()  // 可以内部访问
    }
    // 私有属性, 只能在Car类内部中使用
    private run () {
      console.log('run')
    }
    // 受保护属性, 只能类内部或者子类内部可以访问
    protected loadPeople () {
      console.log('载人')
    }
  }
  // 外部访问
  let car = new Car()
  // car.color    // public可以访问
  // car.run()    // 私有属性不可以被访问了
  // car.loadPeople() // 被保护的属性不可以被访问了

  // 子类访问
  class Audi extends Car {
    sayHi () {
      // console.log(this.color) // public可以访问
      // this.run()           // 私有属性不可以被访问了
      // this.loadPeople()    // 被保护的属性可以被子类访问
    }
  }
  // 子类的外部访问都可以
  let audi = new Audi()
  // audi.color   // public可以访问
  // audi.run()    // 私有属性不可以被访问了
  // audi.loadPeople()  // 被保护的属性不可以被访问了
  1. 类的只读属性和参数属性
  class Cat {
    // 只读属性
    readonly name: string
    // 参数属性, 加了public, 相当于省去了声明属性和构造器中初始化的过程
    constructor ( public type: string) {
      this.name = '嘟嘟'
    }
  }
  let cat = new Cat('噗噗')
  // cat.name = 'test' // 只读属性不可以被改写
  1. 类的存取器
  class Person {
    // 私有属性 "_" 标记
    private _name: string = ''
    // 存取器, 就是get和set函数, 对存储值做校验
    get name (): string {
      return this._name
    }
    set name (value: string) {
      this._name = value
    }
  }
  let p = new Person();
  console,log(p.name)

TS中的接口, 可选属性, 只读属性

  1. 概念: 一个约定或者规范, 限制用户传入的参数, 关键字
    interface

  2. 可选属性, 此属性可传可不传

  3. 接口内部还可以只读属性, 不可以重新赋值

  // interface 关键字声明接口, '?'可选属性, 可传可不传
  interface AjaxOption {
    url?: string,
    // 只读属性
    readonly type: string,
    data?: object,
    success(data: object):void,
    // 额外的属性检查, 告诉接口可能还存在其他多个参数
    [propName: string]: any
  }
  // 创建ajax方法, 参数是定好的接口
  const ajax = (options: AjaxOption) => {}
  // 调用, 如果不按接口来就会报错
  // ajax({}) 
  1. 函数类型的接口
  interface SumInterFace {
    (a: number, b:number):number
  }
  // 函数
  const sum: SumInterFace = (a: number, b: number) => { return a + b }
  1. 类的类型接口(数据库访问层代码接口), 关键字: implements
  interface PersonInterFace {
    name: string,
    age: number,
    eat(): void
  }
  // 类实现接口, 必须使用关键字`implements`
  class XiaoMing implements PersonInterFace {
    name =  '小明'
    age = 18
    eat () {
      console.log(123)
    }
  }
  // 可用于数据库访问层的代码实现
  1. 接口的继承

    1. 接口继承接口, 关键词是: extends, 还有多接口继承,分隔
      interface TwoDPointInterFace {
        x: number,
        y: number
      }
      interface TimeInterFace {
        time: string
      }
      // 3D的点继承2D的点还有时间轴, 关键字extends
      interface ThreeDPointInterFace extends TwoDPointInterFace, TimeInterFace{
        z: number
      }
    
    1. 接口继承类
      // 定义类
      class Bird {
        type: string = '鸟'
        fly () {
    
        }
      }
      // 定义继承类的接口
      interface MiniBird extends Bird {
    
      }
      // 实现接口
      let flyingBird: MiniBird = {
        type: '',
        fly () {
          
        }
      }
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容