zoukankan      html  css  js  c++  java
  • TypeScript 入门笔记

    1、原始数据类型
    JavaScript 的类型分为两种:原始数据类型和对象数据类型。原始数据类型包括布尔值、数值、字符串、null、undefined 以及 ES6 中的 Symbol。
    前五种数据类型在 TypeScript 中的应用。
    注意布尔值:在 JavaScript 中,boolean 是一种基本的数据类型,Boolean 是一个将布尔值打包的布尔对象。在 TypeScript 中,boolean 也是基本数据类型,但是 Boolean 是构造函数。
    2、在 TypeScript 中:
    * 二进制或八进制表示的数字会被编译成十进制。
    * 可以用 void 表示没有返回值的函数。
    * 任意值(Any)用来 表示允许赋值为任意类型。在任意值上可以访问任何属性和方法。未指定类型的无初始值的变量会被识别为任意值。
    * 联合类型(使用 | 分隔)表示取值可以为多种类型中的一种。当 ts 不确定一个联合属性的变量是哪个类型的时候,只能访问联合类型里的共有属性和方法。
    3、对象的类型——接口
    接口名一般首字母大写
    <template>
    interface InterfaceName {
    readonly propName: type; // 用 readonly 定义只读属性
    propertyName1: type1; // : 表示该属性必需
    propertyName2?: type2; // ?: 表示该属性可选
    [propertyName: type]: any; // 任意属性
    }
    注:一旦定义了任意属性,那么确定属性和可选属性都必须是它的子属性。
    4、数组的类型
    (1) 类型+方括号 表示法
    let fibonacci: number[] = [1, 1, 2, 3, 5];
    (2) 数组泛型 Array<elemType>
    let fibonacci: Array<number> = [1, 1, 2, 3, 5];
    (3)用接口表示数组
    interface NumberArray {
    [idnex: number]: number;
    }
    let fibonacci: NumberArray = [1, 1, 2, 3, 5]
    (4)any 在数组中表示允许出现任意类型
    let list: any[] = ['Xcat Liu', 25, {website: 'http://xcatliu.com'}]
    (5)类数组
    5、函数的类型
    JS 中函数声明的方式有:函数声明和函数表达式。
    TS 中,要对函数的输入输出有约束
    (1)函数声明:
    function sum(x: number, y: number): number {
    return x + y;
    }
    (2)函数表达式:
    let sum: (x: number, y: number) => number = function (x: number, y: number): number {
    return x + y;
    }
    在 TypeScript 中,=> 用来表示函数定义,左边是输入类型,右边是输出类型,不同于 ES6 中的箭头函数(=>)。
    (3)用接口定义函数
    interface SearchFunc {
    (source: string, subString: string): boolean;
    }
    let mySearch: SearchFunc;
    mySearch = function(source: string, subString: string) {
    return source.search(subString) !== -1;
    }
    (4)参数中的可选参数表示方式和接口中的可选属性类似,可选参数必须放在参数列表的最后一项
    function bulidName(firistName: string, lastName?: string) {
    if (lastName) {
    return firistName + ' ' + lastName;
    } else {
    return firistName;
    }
    }
    TS 中,添加了默认值的参数会被识别为可选参数,此时不受放置位置限制
    剩余参数可用 ...rest 表示,rest 参数只能是参数列表中的最后一项
    (5)断言类型:常用于联合类型
    语法:<type>value 或 value as type
    function getLength(something: string | number):number {
    if (<string>something.length) {
    return <string>something.length;
    } else {
    return something.toString().length();
    }
    }
    断言不是类型转换,不能将变量断言成一个联合类型中不存在的类型。
    6、类型别名:用 type 创建类型别名,常用于联合类型
    type Name = string;
    type Nameresolver = () => string;
    type NameOrResolver = Name | NameOrResolver;
    function getName(n: NameOrResolver): Name{
    if (typeof n === 'string') {
    return n;
    } else {
    return n();
    }
    }
    7、字符串字面量类型:用来约束取值只能是某几个字符串中的一个
    8、元组:合并了不同类型的对象
    可以对元组中的某一项进行赋值,若直接对元组类型的变量进行初始化或者负值,需要提供所有元祖类型中指定的项。
    当赋值给越界的元素时,越界元素的类型会被限制为元组中每个类型的联合类型。
    9、枚举(enum):枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射。
    枚举项可以包含常数项和计算所得项。
    常数枚举:使用 const enum 定义枚举类型,会在编译阶段被删除,且枚举项不能包含计算所得项。
    外部枚举:使用 declare enum 定义枚举类型,常出现在声明文件中。
    10、类
    ES6 中的类 -- 通过 new 生成新实例的时候,会自动调用构造函数;使用 extends 关键字实现继承,子类中使用 super 关键字来调用
    TypeScript 中类的用法:
    (1)访问修饰符:public、private 和 protected
    private 修饰的属性或方法,在子类中也是不允许访问的;
    protected 修饰的属性或方法,允许在子类中访问;
    public 修饰的属性或方法,允许在任何地方被访问。
    (2)抽象类:不允许被实例化
    (3)类的类型:与接口类似
    (4)类与接口:一个类可以实现多个接口,用 implements 关键字来实现
    (5)接口可以继承接口,可以继承类
    11、泛型:定义在函数、接口或类的时候,不预先制定具体的类型,而在使用的时候再指定类型
    定义泛型时,可以一次性定义多个类型参数。
    泛型约束
    泛型接口
    泛型类
    12、声明合并:若定义了两个相同名字的函数、接口或类,则会合并成一个类型。

    参考:https://www.gitbook.com/book/xcatliu/typescript-tutorial/details

  • 相关阅读:
    Dynamics CRM 请求服务时报access is denied错误
    (转载)表服务器无法打开与报表服务器数据库的连接。所有请求和处理都要求与数据库建立连接。
    如何将sqlserver的windows验证模式改为SQL Server 和 Windows 混合身份验证模式
    (转载)SQL Server2008附加数据库之后显示为只读时解决方法
    CRM导入组织报实例名称必须与计算机名称相同的问题
    The ENU localization is not supported by this SQL Server media
    js验证input输入框(字母,数字,符号,中文)
    Microsoft Dynamics CRM 2011 JS操作集锦
    一入python深似海--class
    TLB的作用及工作过程
  • 原文地址:https://www.cnblogs.com/xlb-happymoment/p/7931550.html
Copyright © 2011-2022 走看看