zoukankan      html  css  js  c++  java
  • TypeScript 小记

    1. 对比JavaScript

    • TypeScript是JavaScript的超集,可编译为JavaScript,主要提供类型系统等增强代码的可读性和可维护性,适合中大型项目多人协作;
    • TypeScript只会进行静态检查,如果发现有错误,编译的时候就会报错;

    2. 原始数据类型

    • boolean,number,string,null,undefined,void(一般用于返回值);
    • 与void的区别是,undefined和null是所有类型的子类型,也就是说undefined类型的变量,可以赋值给number类型的变量,void不行;

    3. 任意值any

    • 赋值为任意类型,如果未指定类型,则为任意值类型;

    4. 类型推论

    • 若没指定变量类型赋值,则会根据之前变量的类型进行推论,之后重新赋值会检测类型;

    5. 联合类型(Union Types)

    • 多种类型 let a: string | number; 

    6. 接口(interface)

    • 用于定义对象的类型,对类的行为进行抽象,对象的描述;接口首字母一般大写;
    • 可选属性:a?: string;
    • 任意属性:[propName: string]: string,一旦定义了任意属性,则确定属性和可选属性都必须是它的子属性;
    • 只读属性:readOnly a: string;只能在创建阶段被赋值;

    7. 数组

    • 类型+[] 表示,let arr: number[] = [1, 2, 3];
    • 数组泛型表示,let arr: Array<number> = [1, 2, 3];
    • 接口表示
      interface NumberArray {
          [index: number]: number
      }
      let arr: NumberArray = [1, 2, 3];
    • any表示数组中允许出现任意类型;
    • 常见的类数组都有自己的接口定义,如 IArgumentsNodeListHTMLCollection 等;

    8. 函数

    • 会对参数进行约束,不允许输入多余(或少)的参数;
    • 在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型;
    • 可选参数后面不允许再出现必须参数;
    • TypeScript 会将添加了默认值的参数识别为可选参数,这时就不受「可选参数必须接在必需参数后面」的限制;
    • 重载允许一个函数接受不同数量或类型的参数时,作出不同的处理;

    9. 类型断言(Type Assertion)

    • 可以用来手动指定一个值的类型;
    • <类型>变量;
    • 类型断言不是类型转换,断言成一个联合类型中不存在的类型是不允许的;

    10. 声明文件

    • declare var jQuery: (selector: string) => any;
    • 通常我们会把类型声明放到一个单独的文件中,这就是声明文件,约定以.d.ts为后缀;
    • 然后在使用到的文件的开头,用「三斜线指令」表示引用了声明文件,
      /// <reference path='./jQuery.d.ts' />

    11. 内置对象

    • Boolean、Error、Date、RegExp等;
    • DOM 和 BOM 的内置对象;
    • TypeScript 核心库的定义文件中定义了所有浏览器环境需要用到的类型,并且是预置在 TypeScript 中;
    • TypeScript 核心库的定义中不包含 Node.js 部分

    12. 类型别名

    • 给类型起新名字;
    • type Name = string;
    • 类型别名常用于联合类型;

    13. 字符串字面量类型

    • 约束取值只能是某几个字符串中的一个;
    • type EventNames = 'click' | 'scroll' | 'mousemove';
    • 类型别名与字符串字面量类型都是使用type进行定义;

    14. 元组(Tuple)

    • 数组合并了相同类型的对象,而元组合并了不同类型的对象;
    • 当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型;

    15. 枚举(Enum)

    • 用于取值被限定在一定范围内的场景,如一周七天
      enum Week { Sun, Mon, Tue }
    • 可以手动赋值
      enum Week { Sun = 6, Mon, Tue }
    • 两种类型:常数项(constant member)和计算所得项(computed member);
    • 常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员;
    • 外部枚举(Ambient Enums)是使用declare enum定义的枚举类型;

    16. 类

    • OOP三大特性:封装、继承、多态;
    • 存取器(getter & setter):用以改变属性的读取和赋值行为;
    • 修饰符(Modifiers):用于限定成员或类型的性质,TypeScript中有public、private、protected;protected类似于private,区别是它在子类中也是允许被访问的;
    • es6使用static修饰符修饰的方法称为静态方法,它们不需要实例化,而是直接通过类来调用;es7中可以使用static定义一个静态属性;
    • abstract用于定义抽象类(不允许被实例化)和其中的抽象方法;

    17. 类与接口

    • 一般来讲,一个类只能继承自一个类,有时不同类之间有些共有的特性,就可以提取成接口,用implements实现;
    • 接口可以继承接口,接口也可以继承类;

    18. 泛型(Generics)

    • 指在定义函数、接口或类的时候,不预先指定类型,而在使用时再指定类型的一种特性;

    19. 声明合并

    • 若定义了两个相同名字的函数、接口或类,那么它们会合并成一个类型;
    • 合并的属性的类型必须是唯一的。
  • 相关阅读:
    系统设计5:Google三剑客
    lintcode亚麻九题
    设计模式17:单例模式
    设计模式16:迭代器模式
    设计模式15:组合模式
    476. Number Complement
    561. Array Partition I
    627. Swap Salary
    617. Merge Two Binary Trees
    728. Self Dividing Numbers
  • 原文地址:https://www.cnblogs.com/colima/p/9738904.html
Copyright © 2011-2022 走看看