zoukankan      html  css  js  c++  java
  • typescript备忘录

    一.基础类型:
    布尔值
    let isDone: boolean = true;

    数字
    let num:number = 6;

    字符串
    let name:string = “123456”;

    数组
    let list:number[] = [1,2,3];
    let list:Array<number> = [1,2,3];//数组泛型

    元祖
    let list: [string,number] = ['123',1]//元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同

    枚举
    enum Color {Red, Green, Blue}
    let c: Color = Color.Green;
    元素编号默认从0开始,但是可以直接赋值
    enum Color {Red = 1, Green = 2, Blue = 4}//编号为1,2,4
    可以直接Color[4]调用,值为Blue

    any
    let notSure: any = 4;

    void
    function warnUser(): void {
    console.log("This is my warning message");
    }
    void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void

    null,undefined
    默认情况下null和undefined是所有类型的子类型

    never
    never类型表示的是那些永不存在的值的类型
    never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型

    object
    object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型

    类型断言
    let someValue: any = "this is a string";
    let strLength: number = (someValue as string).length;

    二.接口interface(接口的作用就是为类型命名和为你的代码或第三方代码定义契约)
    1.带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个?符号。
    interface SquareConfig {
    color?: string;
    width?: number;
    }

    2.interface Point {
    readonly x: number;
    readonly y: number;
    }
    readonly可以指定只读属性
    同理数组中也可以ReadonlyArray<T>类型,它与Array<T>相似,只是把所有可变方法去掉了,因此可以确保数组创建后再也不能被修改。

    3.字符串索引签名(绕开检查的一种方式,还可用类型断言XXX as XXX)
    interface SquareConfig {
    color?: string;
    width?: number;
    [propName: string]: any;
    }
    我们要表示的是SquareConfig可以有任意数量的属性,并且只要它们不是color和width,那么就无所谓它们的类型是什么。

    4.函数类型
    定义函数参数类型及返回值类型
    interface SearchFunc {
    (source: string, subString: string): boolean;
    }
    let mySearch: SearchFunc;
    mySearch = function(source: string, subString: string) {
    let result = source.search(subString);
    return result > -1;
    }

    5.接口继承类
    当接口继承了一个类类型时,它会继承类的成员但不包括其实现。

    6.当一个接口继承了类的私有成员变量,则只有这个类的子类能够实现此接口。

    7.派生类包含了一个构造函数,它 必须调用 super(),它会执行基类的构造函数。
    而且,在构造函数里访问 this的属性之前,我们 一定要调用 super()

    8. 在TypeScript里,成员都默认为 public

    9.当成员被标记成 private时,它就不能在声明它的类的外部访问

    10.protected修饰符与 private修饰符的行为很相似,但有一点不同, protected成员在派生类中仍然可以访问。

    11.构造函数也可以被标记成 protected。 这意味着这个类不能在包含它的类外被实例化,但是能被继承。
    也就是说不能直接调用此类的构造函数。

    12.静态属性必须通过类名.xx访问。

    13.抽象类做为其它派生类的基类使用。 它们一般不会直接被实例化。抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。
    不能直接调用派生类中抽象类所不具有的方法。

    14.可选参数必须跟在必须参数后面。

    15.剩余参数
    在JavaScript里,你可以使用 arguments来访问所有传入的参数。在TypeScript里,你可以把所有参数收集到一个变量里
    function buildName(firstName: string, ...restOfName: string[]) {
    return firstName + " " + restOfName.join(" ");
    }

    16. 顶级的非方法式调用会将 this视为window。 (注意:在严格模式下, this为undefined而不是window)

    17.泛型
    我们需要一种方法使返回值的类型与传入参数的类型是相同的
    function identity<T>(arg: T): T {
    return arg;
    }
    我们给identity添加了类型变量T。 T帮助我们捕获用户传入的类型(比如:number),之后我们就可以使用这个类型。
    之后我们再次使用了 T当做返回值类型。现在我们可以知道参数类型与返回值类型是相同的了。

    现在假设我们想操作T类型的数组而不直接是T
    function loggingIdentity<T>(arg: T[]): T[] {
    console.log(arg.length);
    return arg;
    }

    18.你可以使用 readonly关键字将属性设置为只读的

    19.交叉类型<T&U>

    20.联合类型我们用竖线( |)分隔每个类型,所以 number | string | boolean表示一个值可以是 number, string,或 boolean
    如果一个值是联合类型,我们只能访问此联合类型的所有类型里共有的成员。

    21.类型谓词:谓词为 parameterName is Type这种形式, parameterName必须是来自于当前函数签名里的一个参数名

    22.string | null, string | undefined和 string | undefined | null是不同的类型,也就是说不能直接赋值

    23.可选参数会被自动地加上 | undefined
    function f(x: number, y?: number) {
    return x + (y || 0);
    }
    f(1, 2);
    f(1);
    f(1, undefined);
    f(1, null); // error, 'null' is not assignable to 'number | undefined'

    24.如果编译器不能够去除 null或 undefined,你可以使用类型断言手动去除。 语法是添加 ! 后缀

    25.类型别名type Name = string
    然而,类型别名不能出现在声明右侧的任何地方。

    type Yikes = Array<Yikes>; // error

    26.首先是 keyof T, 索引类型查询操作符。 对于任何类型 T, keyof T的结果为 T上已知的公共属性名的联合

    27.第二个操作符是 T[K], 索引访问操作符 这意味着 person['name']具有类型 Person['name'] — 在我们的例子里则为 string类型
    意思是在Person接口中,name的类型为string

    28.type Nullable<T> = { [P in keyof T]: T[P] | null }
    属性列表是 keyof T且结果类型是 T[P]或者null的变体。 这是使用通用映射类型的一个好模版

    29.预定义的有条件类型:
    Exclude<T, U> -- 从T中剔除可以赋值给U的类型。
    Extract<T, U> -- 提取T中可以赋值给U的类型。
    NonNullable<T> -- 从T中剔除null和undefined。
    ReturnType<T> -- 获取函数返回值类型。
    InstanceType<T> -- 获取构造函数类型的实例类型。
    type T00 = Exclude<"a" | "b" | "c" | "d", "a" | "c" | "f">; // "b" | "d"

    30.外部枚举declare在正常的枚举里,没有初始化方法的成员被当成常数成员。
    对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的

    31.编译模块的ts文件时:我们必需要在命令行上指定一个模块目标。
    对于Node.js来说,使用--module commonjs; 对于Require.js来说,使用--module amd
    tsc --module commonjs Test.ts

    32.危险信号(错误写法)
    文件的顶层声明是export namespace Foo { ... } (删除Foo并把所有内容向上层移动一层)
    文件只有一个export class或export function (考虑使用export default)
    多个文件的顶层具有同样的export namespace Foo { (不要以为这些会合并到一个Foo中!)

    33.命名空间
    记录它们类型的同时还不用担心与其它对象产生命名冲突。
    因此,我们把验证器包裹到一个命名空间内,而不是把它们放在全局命名空间下

    34.当涉及到多文件时,我们必须确保所有编译后的代码都被加载了。 我们有两种方式
    tsc --outFile sample.js Test.ts
    tsc --outFile sample.js Validation.ts LettersOnlyValidator.ts ZipCodeValidator.ts Test.ts
    第二种方式,我们可以编译每一个文件(默认方式),那么每个源文件都会对应生成一个JavaScript文件。
    然后,在页面上通过 <script>标签把所有生成的JavaScript文件按正确的顺序引进来

  • 相关阅读:
    Auto Mapper01
    一个ActionResult中定位到两个视图—<团委项目>
    网站根目录的问题
    数据库基础和断点调试
    linux 环境下jmeter+ant+jenkins
    Postman 下载和使用
    用ExtentReports美化你的测试报告
    extentreports报告插件与testng集成
    SourceTree使用图解
    charles4.2下载与破解方法以及配置https
  • 原文地址:https://www.cnblogs.com/xinyouhunran/p/11721407.html
Copyright © 2011-2022 走看看