传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但这对于熟悉使用面向对象方式的程序员来说有些棘手,因为他们用的是基于类的继承并且对象是从类构建出来的。从ECMAScript 2015,也就是ECMAScript 6,JavaScript程序将可以使用这种基于类的面向对象方法。
TypeScript的核心原则之一是对值所具有的shape进行类型检查。它有时被称做“鸭式辨型法”或“结构性子类型化”。在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。接口初探下面通过一个简单示例来观察接口是如何工作的:function printLabel(labelledObj: { label: string }) { console.log(labelledObj.label);
为了让程序有价值,我们需要能够处理最简单的数据单元:数字,字符串,结构体,布尔值等。TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。布尔值最基本的数据类型就是简单的true/false值,在JavaScript和TypeScript里叫做boolean(其它语言中也一样)。let isDone: boolean = false;
改进性能1.1版本的编译器速度比所有之前发布的版本快4倍。阅读这篇博客里的有关图表更好的模块可见性规则TypeScript现在只在使用--declaration标记时才严格强制模块里类型的可见性。这在Angular里很有用,例如:module MyControllers { interface ZooScope extends ng.IScope { animals: Animal[];
受保护的类里面新的protected修饰符作用与其它语言如C++,C#和Java中的一样。一个类的protected成员只在这个类的子类中可见:class Thing { protected doSomething() { /* ... */ }}class MyThing extends Thing { public myMethod() { // OK,可以在子类里访问受保护的成员 this.doSomething(); }}var t = new MyThing();t.doSomething();
联合类型概述联合类型有助于表示一个值的类型可以是多种类型之一的情况。比如,有一个API接命令行传入string类型,string[]类型或者是一个返回string的函数。你就可以这样写:interface RunOptions { program: string; commandline: string[]|string|(() => string);
ES6 模块TypeScript 1.5 支持 ECMAScript 6 (ES6) 模块. ES6 模块可以看做之前 TypeScript 的外部模块换上了新的语法: ES6 模块是分开加载的源文件, 这些文件还可能引入其他模块, 并且导出部分供外部可访问. ES6 模块新增了几种导入和导出声明. 我们建议使用 TypeScript 开发的库和应用能够更新到新的语法, 但不做强制要求.
JSX 支持JSX 是一种可嵌入的类似 XML 的语法. 它将最终被转换为合法的 JavaScript, 但转换的语义和具体实现有关. JSX 随着 React 流行起来, 也出现在其他应用中. TypeScript 1.6 支持 JavaScript 文件中 JSX 的嵌入, 类型检查, 以及直接编译为 JavaScript 的选项.新的 .tsx 文件扩展名和 as 运算符TypeScript 1.6 引入了新的 .tsx 文件扩展名.
支持 async/await 编译到 ES6 (Node v4+)TypeScript 目前在已经原生支持 ES6 generator 的引擎 (比如 Node v4 及以上版本) 上支持异步函数. 异步函数前置 async 关键字; await 会暂停执行, 直到一个异步函数执行后返回的 promise 被 fulfill 后获得它的值.例子在下面的例子中, 输入的内容将会延时 200 毫秒逐个打印:"use strict";
类型参数约束在 TypeScript 1.8 中, 类型参数的限制可以引用自同一个类型参数列表中的类型参数. 在此之前这种做法会报错. 这种特性通常被叫做 F-Bounded Polymorphism.例子function assign<T extends U, U>(target: T, source: U): T { for (let id in source) { target[id] = source[id]; } return target;
即将到来的Angular 2框架是使用TypeScript开发的。因此Angular和TypeScript一起使用非常简单方便。Angular团队也在其文档里把TypeScript视为一等公民。正因为这样,你总是可以在Angular 2官网里查看到最新的结合使用Angular和TypeScript的参考文档。在这里查看快速上手指南,现在就开始学习吧!
安装 TypeScript如果你使用的 Visual Studio 版本还不支持 TypeScript, 你可以安装 Visual Studio 2015 或者 Visual Studio 2013。这个快速上手指南使用的是 Visual Studio 2015。新建项目选择 File选择 New Project选择 Visual C#选择 ASP.NET Web Application选择 MVC取消复选 "Host in the cloud" 本指南将使用一个本地示例。
2.1调查 Function bind 操作符支持工程引用readonly 修饰符调查 具名类型支持Language Service API里支持代码重构功能扁平化声明2.
层次概述核心TypeScript编译器语法分析器(Parser): 以一系列原文件开始, 根据语言的语法, 生成抽象语法树(AST)联合器(Binder): 使用一个Symbol将针对相同结构的声明联合在一起(例如:同一个接口或模块的不同声明,或拥有相同名字的函数和模块)。这能帮助类型系统推导出这些具名的声明。
快捷列表AtomEclipseEmacsNetBeansSublime TextTypeScript BuilderVimVisual StudioVisual Studio CodeWebStormAtomAtom-TypeScript,由TypeStrong开发的针对Atom的TypeScript语言服务。EclipseEclipse TypeScript 插件,由Palantir开发的Eclipse插件。
这个编码规范是给TypeScript开发团队在开发TypeScript时使用的。对于使用TypeScript的普通用户来说不一定适用,但是可以做为一个参考。命名使用PascalCase为类型命名。不要使用I做为接口名前缀。使用PascalCase为枚举值命名。使用camelCase为函数命名。使用camelCase为属性或本地变量命名。不要为私有属性名添加_前缀。尽可能使用完整的单词拼写命名。
Browserify安装npm install tsify使用命令行交互browserify main.ts -p [ tsify --noImplicitAny ] > bundle.js使用APIvar browserify = require("browserify");var tsify = require("tsify");browserify() .add('main.ts') .plugin('tsify', { noImplicitAny: true }) .bundle() .pipe(process.stdout);
概述编译选项可以在使用MSBuild的项目里通过MSBuild属性指定。例子 <PropertyGroup Condition="'$(Configuration)' == 'Debug'"> <TypeScriptRemoveComments>false</TypeScriptRemoveComments> <TypeScriptSourceMap>true</TypeScriptSourceMap> </PropertyGroup> <
TypeScript编译器处理Node模块名时使用的是[Node.js模块解析算法](https://nodejs.org/api/modules.html#modules_all_together)。TypeScript也可以同时加载与npm包绑在一起的类型声明文件。编译通过下面的规则来查找`"foo"`模块的类型信息:1. 尝试加载相应代码包目录下`package.json`文件(`node_modules/foo/`)。如果存在,从`"typings"`字段里读取类型文件的路径。
三斜线指令是包含单个XML标签的单行注释。注释的内容会做为编译器指令使用。三斜线指令仅可放在包含它的文件的最顶端。一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令。如果它们出现在一个语句或声明之后,那么它们会被当做普通的单行注释,并且不具有特殊的涵义。/// <reference path="..." />/// <reference path="..." />
关注时代Java