BT

您是否属于早期采用者或者创新人士?InfoQ正在努力为您设计更多新功能。了解更多

TypeScript 1.6发布:完全支持React/JSX

| 作者 张天雷 关注 1 他的粉丝 发布于 2015年9月29日. 估计阅读时间: 7 分钟 | ArchSummit社交架构图谱:Facebook、Snapchat、Tumblr等背后的核心技术

2012年,微软推出了一个能够在Node.js上运行的开源语言——TypeScript。作为JavaScript的超集,TypeScript在兼容JavaScript的同时,额外添加了可选的静态类型和基于类的面向对象编程,并且可用于大规模JavaScript应用的开发。TypeScript一经推出便受到了广泛关注,也逐渐被很多用户所接受。微软公司也听取广大用户的反馈,不断更新TypeScript。近日,微软再次更新TypeScript,推出了1.6版本。该版本添加了对React/JSX、类表达式以及很多新功能的支持。

首先,微软的TypeScript团队充分听取了来自React专家和团队的反馈意见。因此,新版本的TypeScript完全支持React和JSX。MSDN给出了一个tsx类型的文档作为示例。该文档中的代码如下所示。

class MyClass extends React.Component{
    render() { 
Hello, {this.props.who}
; } props: { who?: string; } } var x = ;

该例子中TypeScript代码和JSX语法完美共存,使得React开发人员可以方便的使用TypeScript语言。这样,用户在使用VS、VS Code或者Sublime的时候,就可以进行React和JSX的开发。

此外,新版本TypeScript添加了对类表达式的支持。如下例所示,该特性使得开发人员可以在使用表达式的时候再根据需求进行类的定义。

class StateHandler extends class { reset() { return true; } } {
   constructor() {
     super();
   }
}

var g = new StateHandler();
g.reset();

在之前的版本中,开发人员可以使用 if 语句来缩小变量的类型。新版本的TypeScript考虑到广大用户的需求,直接增加了用户自定义守护函数的支持。

interface Animal {name: string; }
interface Cat extends Animal { meow(); }

function isCat(a: Animal): a is Cat {
  return a.name === 'kitty';
}

var x: Animal;

if(isCat(x)) {
  x.meow(); // OK, x is Cat in this block
}

守护函数采用“a is X”作为标志,根据用户定义来返回布尔值或其他值。该特性不仅允许typeofinstanceof检查,而且允许接口和定制化的分析。

为了更好的支持不同类型之间的混合以及扩展现有的类,TypeScript 1.6版本还添加了新的类型操作符‘&’。该操作符最大的亮点在于对泛型的支持。

function extend(first: T, second: U): T & U {
  let result =  {};
  for (let id in first) {
    result[id] = first[id];
  }

  for (let id in second) {
    if (!result.hasOwnProperty(id)) {
      result[id] = second[id];
    }
  }
  return result;
}

var x = extend({ a: "hello" }, { b: 42 });
x.a; // works
x.b; // works 

之前,很多用户已经希望TypeScript能够支持抽象类。现在,新的版本终于添加了对抽象类的支持。

abstract class A {
  foo(): number { return this.bar(); }
  abstract bar(): number;
}

var a = new A();  // error, Cannot create an instance of the abstract class 'A'

class B extends A {
  bar() { return 1; }
}

var b = new b();  // success, all abstracts are defined

类别名也是之前版本的TypeScript已经支持的功能。但是,之前的类别名被严格限制了使用范围——只能用于确定的类。新版本TypeScript扩展了该功能,开始支持了泛型别名。

type switcharoo = (u: U, t:T)=>T;
var f: switcharoo;
f("bob", 4);

最后,1.6版本的TypeScript还在object literal以及模块解析方面进行了改进。目前,用户已经可以通过官方网站下载用于Visual Studio 2015、Visual Studio 2013的安装文件。而且,用户也可以通过npm或者GitHub进行下载。


感谢徐川对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群InfoQ好读者)。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT