# TypeScript 1.5
完整的破坏性改动列表请到这里查看:breaking change issues (opens new window)。
# 不允许在箭头函数里引用 arguments
这是为了遵循 ES6 箭头函数的语义。之前箭头函数里的 arguments
会绑定到箭头函数的参数。参照 ES6 规范草稿 (opens new window) 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 (opens new window)。
# 上下文的类型将作用于 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 (opens new window) 和 #920 (opens new window)。
# 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) (opens new window)。
变动列表:
- 属性
selection
从Document
类型上移除 - 属性
clipboardData
从Window
类型上移除 - 删除接口
MSEventAttachmentTarget
- 属性
onresize
,disabled
,uniqueID
,removeNode
,fireEvent
,currentStyle
,runtimeStyle
从HTMLElement
类型上移除 - 属性
url
从Event
类型上移除 - 属性
execScript
,navigate
,item
从Window
类型上移除 - 属性
documentMode
,parentWindow
,createEventObject
从Document
类型上移除 - 属性
parentWindow
从HTMLDocument
类型上移除 - 属性
setCapture
被完全移除 - 属性
releaseCapture
被完全移除 - 属性
setAttribute
,styleFloat
,pixelLeft
从CSSStyleDeclaration
类型上移除 - 属性
selectorText
从CSSRule
类型上移除 CSSStyleSheet.rules
现在是CSSRuleList
类型,而非MSCSSRuleList
documentElement
现在是Element
类型,而非HTMLElement
Event
具有一个新的必需属性returnValue
Node
具有一个新的必需属性baseURI
Element
具有一个新的必需属性classList
Location
具有一个新的必需属性origin
- 属性
MSPOINTER_TYPE_MOUSE
,MSPOINTER_TYPE_TOUCH
从MSPointerEvent
类型上移除 CSSStyleRule
具有一个新的必需属性readonly
- 属性
execUnsafeLocalFunction
从MSApp
类型上移除 - 全局方法
toStaticHTML
被移除 HTMLCanvasElement.getContext
现在返回CanvasRenderingContext2D | WebGLRenderingContex
- 移除扩展类型
Dataview
,Weakmap
,Map
,Set
XMLHttpRequest.send
具有两个重载send(data?: Document): void;
和send(data?: String): void;
window.orientation
现在是string
类型,而非number
- 特定于 IE 的
attachEvent
和detachEvent
从Window
上移除
以下是被新加的 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
更多信息,查看完整改动 (opens new window)。
# 类代码体将以严格格式解析
按照 ES6 规范 (opens new window),类代码体现在以严格模式进行解析。行为将相当于在类作用域顶端定义了 "use strict"
;它包括限制了把 arguments
和 eval
做为变量名或参数名的使用,把未来保留字做为变量或参数使用,八进制数字字面量的使用等。