类型 一个保存字符串的文本,类型声明为 string。...从ECMAScript 2015,也就是ECMAScript 6开始,JavaScript程序员将能够使用基于类的面向对象的方式。...对于存取器有下面几点需要注意的: 首先,存取器要求你将编译器设置为输出 ECMAScript 5 或更高。 不支持降级到 ECMAScript 3。...这让我们能够从一个接口里复制成员到另一个接口里,可以更灵活地将接口分割到可重用的模块里。...string): boolean{ return s.length == 5 && numReg.test(s); } } 泛型 软件工程中,我们不仅要创建一致的定义良好的 API
一个保存字符串的文本,类型声明为 string。...从ECMAScript 2015,也就是ECMAScript 6开始,JavaScript程序员将能够使用基于类的面向对象的方式。...对于存取器有下面几点需要注意的: 首先,存取器要求你将编译器设置为输出 ECMAScript 5 或更高。 不支持降级到 ECMAScript 3。...这让我们能够从一个接口里复制成员到另一个接口里,可以更灵活地将接口分割到可重用的模块里。...中文文档 TypeScript TypeScript for Angular 2 - Part 1 (An Introduction) 本文标题:从 JavaScript 到 TypeScript 文章作者
从C#到TypeScript - Generator 上篇讲了Promise,Promise的执行需要不停的调用then,虽然比callback要好些,但也显得累赘。
从C#到TypeScript - 类 在ES6之前Javascript的类都是用function定义的,ES6把类关键字正式加进来,虽说其实也还是function,不过代码可读性上好了不少。...不过不同的是C#类的成员默认是private,而TypeScript默认是public。 在类里面所有成员都必须用this来访问。...u.checkLogin()); // true u.name = 'test'; console.info(u.checkLogin()); // false 参数属性 上面的User类有两个成员,而且都是从构造函数赋值的...类里面的那两个属性其实可以不用写,只要在构造函数的参数上加上操作限定符,TypeScript就会自动为参数生成属性,来重构下上面的User。...兼容性 TypeScript里的类是有兼容性的,这点和C#很不一样,TypeScript认为:只有成员的类型是兼容的,那它们的类型也是兼容的。
true : false; type R = StartsWithtypescript', 'type'> // true 13.
关于对象 Javascript里所有东西都是对象,数字是Number,数组是Array,字符串是String,函数也是Function对象。而所有对象都基于Object对象。...比较符号 和大多数脚本语言一样,javascript是可以隐式类型转换滴,而且Number类型的0和字符串类型的空串转换成boolean的时候都是false。...所以,下面要介绍的是Typescript。 Typescript 要使用Javascript做大型的东西还是有不少坑的。首先它是弱类型的,一旦项目庞大了就很难保证类型不出错。...Node.js的功能都是按模块划分的,具体模块可以见 http://nodejs.org/api/ 。而且Typescript可以作为Node.js的插件供其使用。...[注册的符号调用] ); 这样,基本的Node.js插件的开发就完成了,具体可以参照:http://nodejs.org/api/addons.html Debug Node.js调试起来也比较Nice
从C#到TypeScript - Reflect 在C#里如果想只通过名字来生成类实例、获取属性或执行方法可以使用反射,反射是基于元数据,现在很多流行语言都支持元数据,以此来提供更多便利的功能。...ES6和TypeScript也有Reflect,不过因为JavaScript本身是解释型语言,很多操作如根据名字字符串获取属性,根据字符串执行函数这些原本就有支持,Reflect只是把这些操作归结到一起...name, receiver); Reflect.set(target, name, value, receiver); 看上去也很好理解,和C#很类似: target:操作的对象 name:名字字符串...Reflect.preventExtensions(target) 让一个对象变为不可扩展 Reflect基本上就是把之前Object的方法和一些命令如delete in之类聚到一起,相信ES6之后用
从C#到TypeScript - Promise 背景 相信之前用过JavaScript的朋友都碰到过异步回调地狱(callback hell),N多个回调的嵌套不仅让代码读起来十分困难,维护起来也很不方便...其实C#在Task出现之前也是有类似场景的,Async Programming Mode时代,用Action和Func做回调也很流行,不过也是意识到太多的回调嵌套代码可读性差且维护不易,微软引入了Task...这篇先来看看Promise: Promise的特点 Promise之于TypeScript,相当于Task之于C#,只有返回Promise的函数才能使用async await。...success'); throw new Error('error'); }).catch(function(error) { console.info(error); // 不会执行到这里...console.info('done')); } catch (e){ console.info(e); // 由于最后面的done,所以会把finally里的异常抛出来,如果没有done则不会执行到这里
从C#到TypeScript - 接口 为了更好的抽象出行为和属性,TypeScript在ES6的基础上增加了接口interface。...C#也有interface,不过TypeScript的接口还不大一样,C#里的接口一般是为类服务,让类实现接口中定义的方法或属性。...TypeScript在C#基础上更进一步,由于JavaScript是门非常灵活的语言,TypeScript作为JavaScript的超集需要保持灵活性,所以接口在TypeScript里可以脱离具体的类,...class Request implements RequestConfig { url: string; } 接口不需要类的支持 在C#里面,接口如果没有类来实现的话是没有什么意义的,但在TypeScript...interface Testable { field: T; (arg: T): T; } TypeScript的接口对于C#程序员来说是有点奇怪了,
从C#到TypeScript - function 虽然TypeScript里有了类,但JavaScript的function也还在,这也是和C#的不同所在。...C#里函数不能脱离类工作,但TypeScript的function和JavaScript一样,可以单独工作。...函数参数 TypeScript的参数和JavaScript的参数不太一样,调用JavaScript函数的参数可以多或少都可以,但TypeScript里函数需要确保传入参数的个数和定义的一致。...同C#里的函数参数可以有默认值一样,TypeScript也支持,并且还支持可空参数。...ES6和TypeScript针对这点做了改进,使用箭头函数可以把创建函数时的this自动保存下来。
从C#到TypeScript - 变量 TypeScript的变量声明和ES6差不多,相比之前主要是多了let和const 为什么不用var 不管是TypeScript还是ES6都会兼容以前的javascript...,所以在TypeScript里var也还是保留了。...这些都可能会带了一些不容易注意到的问题。...console.info(`${empty}, ${str}`); // 输出 empty, ,因为str有值,所以用原始的'' 以上就是常用的变量声明及赋值的使用方法,不过基本都是ES6的标准语法,TypeScript
从C#到TypeScript - Proxy 我们知道在C#中要实现代理功能需要自己来实现代理类,并且每个类需要不同的代理类,使用起来不方便,虽然借助一些AOP框架可以一定程度实现拦截,但毕竟框架级别的还是太重了...现在ES6倒是出了个解决方案,Proxy是ES6推出的用于拦截操作的一层代理实现,TypeScript当然也同样支持,下面来看下Proxy是怎么用的。
从C#到TypeScript - 类型 TypeScript和C#一样是微软搞出来的,而且都是大牛Anders Hejlsberg领导开发的,它们之间有很多共同点,现在尝试以C#程序员的角度来理解下TypeScript...功能上和C#差不多: 目的都是为数值提供一个友好的名字,增加代码可读性和可重构性 默认情况下从0开始编号 也可以手动赋值 可以实现类似C# Flag特性 但也有一些细节不一样: C#的枚举值toString...()会返回枚举的文本值,而TypeScript是数值 TypeScript可以通过数值下标取得枚举字符串值 enum Action{ add = 1, edit = 2, del...字符串也基本和C#一样,不过由于是JavaScript的超集,所以当然也支持单引号。...C#6.0里的模板字符串语法糖$"this is {name}'s blog"在TypeScript里也有类似的支持,当然,这也是ES6的规范。
# TypeScript 函数 与 JavaScript 函数区别 TypeScript JavaScript 含有类型 无类型 箭头函数 箭头函数 函数类型 无函数类型 必填和可选参数 所有参数都是可选的
从C#到TypeScript - 装饰器 在C#里面如果想要不直接修改类或方法,但给类或方法添加一些额外的信息或功能,可以想到用Attribute,这是一个十分方便的功能装饰器。...用TypeScript同样也可以利用装饰器来给类、函数、属性以及参数添加附加功能,装饰器是ES7的一个提案,在TypeScript里已经有实现可用,不过需要在tsconfig.json里启用experimentalDecorators..."compilerOptions": { ..., // other options "experimentalDecorators": true } 装饰器介绍 TypeScript中装饰器可以应用到类...function Testable(target: Function) { // 类、方法、属性、方法参数的参数各不相同 //这里可以记录一些信息到target,或者针对target做一些处理,...即属性描述符,有 configurable 是否可以配置,如动态添加删除函数属性之类 writable 是否可写,可以用来设置只读属性 enumerable 是否可枚举,即是否能在for...in中能枚举到
从C#到TypeScript - async await 上两篇分别说了Promise和Generator,基础已经打好,现在可以开始讲async await了。...async await是ES7的议案,TypeScript在1.7版本开始支持async await编译到ES6,并在2.1版本支持编译到ES5和ES3,算是全面支持了。...async function run(){ await Promise.reject('error'); // 这里出异常 console.info('continue'); // 不会执行到这里...先来看看async await在TypeScript翻译后的结果: async function run(){ await delay(); console.info('run'); }...this, void 0, void 0, function* () { yield delay(); console.info('run'); }); } 可以注意到其实还是用
联合类型 可以从字面上进行理解:其实就是多个类型联合在一起,用|符号隔开。 如: string | number, 表示希望这个类型既可以是string,又可以是number。...TypeScript和C#一样,只不是圆括号改成尖括号。...TypeScript可以让string成为一个类型,比如let strType = 'string type'。...必须要在自定义的多个类中有相同的字段,这个字段用的是字符串字面量类型并且把这些类型联合起来。...以上就是TypeScript的类型了,比较灵活也比较难,可能要在实际项目中用用就会比较好掌握。
TypeScript不允许为单个成员装饰get和set访问器。相反,该成员的所有装饰器必须应用于按文档顺序指定的第一个访问器。...注意:属性描述符不会做为参数传入属性装饰器,这与TypeScript是如何初始化属性装饰器的有关。因为目前没有办法在定义一个原型对象的成员时描述一个实例属性,并且没办法监视或修改一个属性的初始化方法。.../decorator' @controller('/api/hd') export class AdminController { @get('/login') login(req: Request
1.2 程序运行逻辑 第一步:程序员编写代码文本、形成文件、构成程序; 第二步:编译器将程序代码转换成抽象句法树(abstract syntax tree, AST); AST 是去掉了空白、注释和缩进用的制表符或空格之后的数据结构...第三步:编译器把 AST 转换成字节码; 第四步:字节码再传给运行时程序计算,得到最终结果。 概述:运行程序就是让运行时计算由编译器从源码解析得来的 AST 生成的字节码。...1.4 TypeScript 如何让代码更安全 TypeScript 编译器生成 AST 之后,真正运行代码之前,TypeScript 会对代码做类型检查。...,得到“3”; 第四步:JavaScript 把 [1] 隐式地转换为字符串,得到“1”; 第五步:把两个字符串拼接在一起,得到“31”。...,这些属于运行时异常; ④ TypeScript 所能做的是把纯 JavaScript 代码中那些运行时错误提前到编译时报告!
使用 AOT 编译后的应用,不再包含任何 HTML 片段,取而代之的是编译生成的 TypeScript 代码,这样的话 TypeScript 编译器就能提前发现错误。...: [], }; // 通过 _context 维护新旧 AST,注意 _context 是一个引用,从旧的 AST 到新的 AST。...4.1 Webpack 构建流程分析 从启动构建到输出结果一系列过程: 「初始化参数」 解析 Webpack 配置参数,合并 Shell 传入和 webpack.config.js 文件配置的参数,形成最后的配置结果...「确定入口」 从配置的 entry 入口,开始解析文件构建 AST 语法树,找出依赖,递归下去。...「输出完成」 输出所有的 chunk 到文件系统。