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. 声明合并

  • 若定义了两个相同名字的函数、接口或类,那么它们会合并成一个类型;
  • 合并的属性的类型必须是唯一的。

TypeScript 小记的更多相关文章

  1. Angular2 初学小记

    1.与Angular1的异同 几乎完全不同(什么鬼~ 1)保留一些特性 表达式仍旧用{{}}. 2)属性指令变为驼峰式 ng-if ---> ngIf 3)ng-repeat被ngFor代替 4 ...

  2. JavaScript小记

    JavaScript小记 1. 简介 1. 语言描述 JavaScript 是一门跨平台.面向对象的弱类型动态脚本编程语言 JavaScript 是一门基于原型.函数先行的语言 JavaScript ...

  3. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  4. TypeScript为Zepto编写LazyLoad插件

    平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...

  5. TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided

    VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!

  6. [原]Paste.deploy 与 WSGI, keystone 小记

    Paste.deploy 与 WSGI, keystone 小记 名词解释: Paste.deploy 是一个WSGI工具包,用于更方便的管理WSGI应用, 可以通过配置文件,将WSGI应用加载起来. ...

  7. TypeScript

    TypeScript: Angular 2 的秘密武器(译)   本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch? ...

  8. 打造TypeScript的Visual Studio Code开发环境

    打造TypeScript的Visual Studio Code开发环境 本文转自:https://zhuanlan.zhihu.com/p/21611724 作者: 2gua TypeScript是由 ...

  9. 转职成为TypeScript程序员的参考手册

    写在前面 作者并没有任何可以作为背书的履历来证明自己写作这份手册的分量. 其内容大都来自于TypeScript官方资料或者搜索引擎获得,期间掺杂少量作者的私见,并会标明. 大部分内容来自于http:/ ...

随机推荐

  1. 【Rewrite重定向】Nginx使用rewrite重新定向

    使用nginx做重新定向. nginx参考网址:http://blog.sina.com.cn/s/blog_97688f8e0100zws5.html 语法规则: location [=|~|~*| ...

  2. redis error It was not possible to connect to the redis server(s); to create a disconnected multiplexer, disable AbortOnConnectFail. SocketFailure on PING

    应用redis出现如下错误 It was not possible to connect to the redis server(s); to create a disconnected multip ...

  3. Bootstrap3-文字样式

    Bootstrap将全局font-size设置为14px,line-height为1.428.这些属性直接赋给<body>和所有段落元素.另外,<p>(段落)还被设置了等于1/ ...

  4. 使用 JsPlumb 绘制拓扑图的通用方法

    摘要: 实现 JsPlumb 绘制拓扑图的通用方法. 只要服务端返回一个符合指定格式的数据结构,就可以绘制相应的拓扑图. 难度: 中级 示例工程见:  http://download.csdn.net ...

  5. linux常用命令:chmod 命令

    chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设定法. Linux系统中的每 ...

  6. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  7. 【手把手教你树莓派3 (二)】 启动wifi模块

    概述 树莓派3内置了wifi和蓝牙模块,我们不用像以前的版本那样,再去购买一个外接的模块练到raspberry上. 当我们第一次启动了树莓派的时候,必然使用了网线,但是之后的每一次使用,我们当然更希望 ...

  8. 09:Linux 中各个文件夹的作用

    参考博客 /  根目录 包含了几乎所的文件目录.相当于中央系统.进入的最简单方法是:cd /. /boot  引导程序,内核等存放的目录 这个目录,包括了在引导过程中所必需的文件.在最开始的启动阶段, ...

  9. 20145118 《Java程序设计》 实验报告二

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 1.没有Lin ...

  10. IE6里样式表不起作用解决方法

    写的html页面引用外部css文件的时候在IE7,IE8和FF中能正常作用,即能正常显示,可在IE6中却完全没有作用到,即css文件里的样式根本未被解析到我们的html页面,这是什么原因? 开 始把c ...