TypeScript 1.7

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

this中推断类型发生了变化

在类里,this值的类型将被推断成this类型。这意味着随后使用原始类型赋值时可能会发生错误。

例子:

  1. class Fighter {
  2. /** @returns the winner of the fight. */
  3. fight(opponent: Fighter) {
  4. let theVeryBest = this;
  5. if (Math.rand() < 0.5) {
  6. theVeryBest = opponent; // error
  7. }
  8. return theVeryBest
  9. }
  10. }

推荐:

添加类型注解:

  1. class Fighter {
  2. /** @returns the winner of the fight. */
  3. fight(opponent: Fighter) {
  4. let theVeryBest: Fighter = this;
  5. if (Math.rand() < 0.5) {
  6. theVeryBest = opponent; // no error
  7. }
  8. return theVeryBest
  9. }
  10. }

类成员修饰符后面会自动插入分号

关键字abstract,public,protectedprivate是ECMAScript 3里的保留关键字并适用于自动插入分号机制。之前,在这些关键字出现的行尾,TypeScript是不会插入分号的。现在,这已经被改正了,在上例中abstract class D不再能够正确地继承C了,而是声明了一个m方法和一个额外的属性abstract

注意,asyncdeclare已经能够正确自动插入分号了。

例子:

  1. abstract class C {
  2. abstract m(): number;
  3. }
  4. abstract class D extends C {
  5. abstract
  6. m(): number;
  7. }

推荐:

在定义类成员时删除关键字后面的换行。通常来讲,要避免依赖于自动插入分号机制。