Skip to content

Latest commit

 

History

History
124 lines (93 loc) · 5.37 KB

typescript-1.5.md

File metadata and controls

124 lines (93 loc) · 5.37 KB

TypeScript 1.5

完整的破坏性改动列表请到这里查看:breaking change issues

不允许在箭头函数里引用arguments

这是为了遵循 ES6 箭头函数的语义。之前箭头函数里的arguments会绑定到箭头函数的参数。参照ES6 规范草稿 9.2.12,箭头函数不存在arguments对象。 从 TypeScript 1.5 开始,在箭头函数里使用arguments会被标记成错误以确保你的代码转成 ES6 时没语义上的错误。

例子:

function f() {
  return () => arguments; // Error: The 'arguments' object cannot be referenced in an arrow function.
}

推荐:

// 1. 使用带名字的剩余参数
function f() {
  return (...args) => {
    args;
  };
}

// 2. 使用函数表达式
function f() {
  return function () {
    arguments;
  };
}

内联枚举引用的改动

对于正常的枚举,在 1.5 之前,编译器仅会内联常量成员,且成员仅在使用字面量初始化时才被当做是常量。这在判断检举值是使用字面量初始化还是表达式时会行为不一致。从 TypeScript 1.5 开始,所有非 const 枚举成员都不会被内联。

例子:

var x = E.a; // previously inlined as "var x = 1; /*E.a*/"

enum E {
  a = 1,
}

推荐: 在枚举声明里添加const修饰符来确保它总是被内联。 更多信息,查看#2183

上下文的类型将作用于super和括号表达式

在 1.5 之前,上下文的类型不会作用于括号表达式内部。这就要求做显示的类型转换,尤其是在必须使用括号来进行表达式转换的场合。

在下面的例子里,m具有上下文的类型,它在之前的版本里是没有的。

var x: SomeType = n => m => q;
var y: SomeType = t ? m => m.length : undefined;

class C extends CBase<string> {
  constructor() {
    super({
      method(m) {
        return m.length;
      },
    });
  }
}

更多信息,查看#1425#920

DOM 接口的改动

TypeScript 1.5 改进了lib.d.ts库里的 DOM 类型。这是自 TypeScript 1.0 以来第一次大的改动;为了拥抱标准 DOM 规范,很多特定于 IE 的定义被移除了,同时添加了新的类型如 Web Audio 和触摸事件。

变通方案:

你可以使用旧的lib.d.ts配合新版本的编译器。你需要在你的工程里引入之前版本的一个拷贝。这里是本次改动之前的 lib.d.ts 文件(TypeScript 1.5-alpha)

变动列表:

  • 属性selectionDocument类型上移除
  • 属性clipboardDataWindow类型上移除
  • 删除接口MSEventAttachmentTarget
  • 属性onresizedisableduniqueIDremoveNodefireEventcurrentStyleruntimeStyleHTMLElement类型上移除
  • 属性urlEvent类型上移除
  • 属性execScriptnavigateitemWindow类型上移除
  • 属性documentModeparentWindowcreateEventObjectDocument类型上移除
  • 属性parentWindowHTMLDocument类型上移除
  • 属性setCapture被完全移除
  • 属性releaseCapture被完全移除
  • 属性setAttributestyleFloatpixelLeftCSSStyleDeclaration类型上移除
  • 属性selectorTextCSSRule类型上移除
  • CSSStyleSheet.rules现在是CSSRuleList类型,而非MSCSSRuleList
  • documentElement现在是Element类型,而非HTMLElement
  • Event具有一个新的必需属性returnValue
  • Node具有一个新的必需属性baseURI
  • Element具有一个新的必需属性classList
  • Location具有一个新的必需属性origin
  • 属性MSPOINTER_TYPE_MOUSEMSPOINTER_TYPE_TOUCHMSPointerEvent类型上移除
  • CSSStyleRule具有一个新的必需属性readonly
  • 属性execUnsafeLocalFunctionMSApp类型上移除
  • 全局方法toStaticHTML被移除
  • HTMLCanvasElement.getContext现在返回CanvasRenderingContext2D | WebGLRenderingContex
  • 移除扩展类型DataviewWeakmapMapSet
  • XMLHttpRequest.send具有两个重载send(data?: Document): void;send(data?: String): void;
  • window.orientation现在是string类型,而非number
  • 特定于 IE 的attachEventdetachEventWindow上移除

以下是被新加的 DOM 类型所部分或全部取代的代码库的代表:

  • DefinitelyTyped/auth0/auth0.d.ts
  • DefinitelyTyped/gamepad/gamepad.d.ts
  • DefinitelyTyped/interactjs/interact.d.ts
  • DefinitelyTyped/webaudioapi/waa.d.ts
  • DefinitelyTyped/webcrypto/WebCrypto.d.ts

更多信息,查看完整改动

类代码体将以严格格式解析

按照ES6 规范,类代码体现在以严格模式进行解析。行为将相当于在类作用域顶端定义了"use strict";它包括限制了把argumentseval做为变量名或参数名的使用,把未来保留字做为变量或参数使用,八进制数字字面量的使用等。