Skip to content

Commit

Permalink
satisfy lint
Browse files Browse the repository at this point in the history
  • Loading branch information
zhongsp committed Apr 7, 2024
1 parent 1f3f701 commit 1f9ab31
Show file tree
Hide file tree
Showing 130 changed files with 7,330 additions and 6,966 deletions.
2 changes: 1 addition & 1 deletion PREFACE.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 前言

> Repo: https://github.com/zhongsp/TypeScript
> Repo: [https://github.com/zhongsp/TypeScript](https://github.com/zhongsp/TypeScript)
该工程是对 TypeScript 官方及开源社区书写的编程手册、版本发布说明等综合内容的中文翻译。
感谢 Microsoft 和开源社区的工程师们的工作,为 JavaScript 开发带来了全新的体验!
Expand Down
4 changes: 2 additions & 2 deletions lint.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ var options = {
MD001: false, // Header levels should only increment by one level at a time
MD002: false, // First header should be a h1 header
MD003: "atx", // Header style
MD004: { style: "asterisk" }, // Unordered list style
MD004: { style: "consistent" }, // Unordered list style
MD005: true, // Inconsistent indentation for list items at the same level
MD006: true, // Consider starting bulleted lists at the beginning of the line
MD007: { indent: 2 }, // Unordered list indentation
Expand All @@ -30,7 +30,7 @@ var options = {
MD026: { punctuation: ".,;:!" }, // Trailing punctuation in header
MD027: true, // Multiple spaces after blockquote symbol
MD028: true, // Blank line inside blockquote
MD029: { style: "ordered" }, // Ordered list item prefix
MD029: { style: "one_or_ordered" }, // Ordered list item prefix
MD030: true, // Spaces after list markers
MD031: true, // Fenced code blocks should be surrounded by blank lines
MD032: true, // Lists should be surrounded by blank lines
Expand Down
43 changes: 21 additions & 22 deletions zh/breaking-changes/README.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
# Breaking Changes

* [TypeScript 3.6](typescript-3.6.md)
* [TypeScript 3.5](typescript-3.5.md)
* [TypeScript 3.4](typescript-3.4.md)
* [TypeScript 3.2](typescript-3.2.md)
* [TypeScript 3.1](typescript-3.1.md)
* [TypeScript 3.0](typescript-3.0.md)
* [TypeScript 2.9](typescript-2.9.md)
* [TypeScript 2.8](typescript-2.8.md)
* [TypeScript 2.7](typescript-2.7.md)
* [TypeScript 2.6](typescript-2.6.md)
* [TypeScript 2.4](typescript-2.4.md)
* [TypeScript 2.3](typescript-2.3.md)
* [TypeScript 2.2](typescript-2.2.md)
* [TypeScript 2.1](typescript-2.1.md)
* [TypeScript 2.0](typescript-2.0.md)
* [TypeScript 1.8](typescript-1.8.md)
* [TypeScript 1.7](typescript-1.7.md)
* [TypeScript 1.6](typescript-1.6.md)
* [TypeScript 1.5](typescript-1.5.md)
* [TypeScript 1.4](typescript-1.4.md)
* [TypeScript 1.1](typescript-1.1.md)

- [TypeScript 3.6](typescript-3.6.md)
- [TypeScript 3.5](typescript-3.5.md)
- [TypeScript 3.4](typescript-3.4.md)
- [TypeScript 3.2](typescript-3.2.md)
- [TypeScript 3.1](typescript-3.1.md)
- [TypeScript 3.0](typescript-3.0.md)
- [TypeScript 2.9](typescript-2.9.md)
- [TypeScript 2.8](typescript-2.8.md)
- [TypeScript 2.7](typescript-2.7.md)
- [TypeScript 2.6](typescript-2.6.md)
- [TypeScript 2.4](typescript-2.4.md)
- [TypeScript 2.3](typescript-2.3.md)
- [TypeScript 2.2](typescript-2.2.md)
- [TypeScript 2.1](typescript-2.1.md)
- [TypeScript 2.0](typescript-2.0.md)
- [TypeScript 1.8](typescript-1.8.md)
- [TypeScript 1.7](typescript-1.7.md)
- [TypeScript 1.6](typescript-1.6.md)
- [TypeScript 1.5](typescript-1.5.md)
- [TypeScript 1.4](typescript-1.4.md)
- [TypeScript 1.1](typescript-1.1.md)
66 changes: 40 additions & 26 deletions zh/breaking-changes/typescript-1.4.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,28 @@ var bs: { x: number; y?: number; z?: number }[] = [b, a];

## 泛型接口

当在多个T类型的参数上使用了不同的类型时会得到一个错误,就算是添加约束也不行:
当在多个 T 类型的参数上使用了不同的类型时会得到一个错误,就算是添加约束也不行:

```typescript
declare function foo<T>(x: T, y:T): T;
var r = foo(1, ""); // r used to be {}, now this is an error
declare function foo<T>(x: T, y: T): T;
var r = foo(1, ''); // r used to be {}, now this is an error
```

添加约束:

```typescript
interface Animal { x }
interface Giraffe extends Animal { y }
interface Elephant extends Animal { z }
function f<T extends Animal>(x: T, y: T): T { return undefined; }
interface Animal {
x;
}
interface Giraffe extends Animal {
y;
}
interface Elephant extends Animal {
z;
}
function f<T extends Animal>(x: T, y: T): T {
return undefined;
}
var g: Giraffe;
var e: Elephant;
f(g, e);
Expand All @@ -51,66 +59,72 @@ f(g, e);
**推荐** 如果这种不匹配的行为是故意为之,那么明确指定类型参数:

```typescript
var r = foo<{}>(1, ""); // Emulates 1.0 behavior
var r = foo<string|number>(1, ""); // Most useful
var r = foo<any>(1, ""); // Easiest
var r = foo<{}>(1, ''); // Emulates 1.0 behavior
var r = foo<string | number>(1, ''); // Most useful
var r = foo<any>(1, ''); // Easiest
f<Animal>(g, e);
```

_或_重写函数定义指明就算不匹配也没问题
**重写函数定义指明就算不匹配也没问题

```typescript
declare function foo<T,U>(x: T, y:U): T|U;
function f<T extends Animal, U extends Animal>(x: T, y: U): T|U { return undefined; }
declare function foo<T, U>(x: T, y: U): T | U;
function f<T extends Animal, U extends Animal>(x: T, y: U): T | U {
return undefined;
}
```

## 泛型剩余参数

不能再使用混杂的参数类型:

```typescript
function makeArray<T>(...items: T[]): T[] { return items; }
var r = makeArray(1, ""); // used to return {}[], now an error
function makeArray<T>(...items: T[]): T[] {
return items;
}
var r = makeArray(1, ''); // used to return {}[], now an error
```

`new Array(...)`也一样

**推荐** 声明向后兼容的签名,如果1.0的行为是你想要的
**推荐** 声明向后兼容的签名,如果 1.0 的行为是你想要的

```typescript
function makeArray<T>(...items: T[]): T[];
function makeArray(...items: {}[]): {}[];
function makeArray<T>(...items: T[]): T[] { return items; }
function makeArray<T>(...items: T[]): T[] {
return items;
}
```

## 带类型参数接口的重载解析

```typescript
var f10: <T>(x: T, b: () => (a: T) => void, y: T) => T;
var r9 = f10('', () => (a => a.foo), 1); // r9 was any, now this is an error
var r9 = f10('', () => a => a.foo, 1); // r9 was any, now this is an error
```

**推荐** 手动指定一个类型参数

```typescript
var r9 = f10<any>('', () => (a => a.foo), 1);
var r9 = f10<any>('', () => a => a.foo, 1);
```

## 类声明与类型表达式以严格模式解析

ECMAScript 2015语言规范\(ECMA-262 6th Edition\)指明_ClassDeclaration_和_ClassExpression_使用严格模式。 因此,在解析类声明或类表达式时将使用额外的限制。
ECMAScript 2015 语言规范\(ECMA-262 6th Edition\)指明*ClassDeclaration**ClassExpression*使用严格模式。 因此,在解析类声明或类表达式时将使用额外的限制。

例如:

```typescript
class implements {} // Invalid: implements is a reserved word in strict mode
class implements {} // Invalid: implements is a reserved word in strict mode
class C {
foo(arguments: any) { // Invalid: "arguments" is not allow as a function argument
var eval = 10; // Invalid: "eval" is not allowed as the left-hand-side expression
arguments = []; // Invalid: arguments object is immutable
}
foo(arguments: any) {
// Invalid: "arguments" is not allow as a function argument
var eval = 10; // Invalid: "eval" is not allowed as the left-hand-side expression
arguments = []; // Invalid: arguments object is immutable
}
}
```

关于严格模式限制的完整列表,请阅读 Annex C - The Strict Mode of ECMAScript of ECMA-262 6th Edition。

115 changes: 60 additions & 55 deletions zh/breaking-changes/typescript-1.5.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@

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

这是为了遵循ES6箭头函数的语义。之前箭头函数里的`arguments`会绑定到箭头函数的参数。参照[ES6规范草稿](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts) 9.2.12,箭头函数不存在`arguments`对象。 从TypeScript 1.5开始,在箭头函数里使用`arguments`会被标记成错误以确保你的代码转成ES6时没语义上的错误
这是为了遵循 ES6 箭头函数的语义。之前箭头函数里的`arguments`会绑定到箭头函数的参数。参照[ES6 规范草稿](http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts) 9.2.12,箭头函数不存在`arguments`对象。 从 TypeScript 1.5 开始,在箭头函数里使用`arguments`会被标记成错误以确保你的代码转成 ES6 时没语义上的错误

**例子:**

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

Expand All @@ -19,101 +19,106 @@ function f() {
```typescript
// 1. 使用带名字的剩余参数
function f() {
return (...args) => { args; }
return (...args) => {
args;
};
}

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

## 内联枚举引用的改动

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

**例子:**

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

enum E {
a = 1
a = 1,
}
```

**推荐:** 在枚举声明里添加`const`修饰符来确保它总是被内联。 更多信息,查看[\#2183](https://github.com/Microsoft/TypeScript/issues/2183)

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

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

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

```typescript
var x: SomeType = (n) => ((m) => q);
var y: SomeType = t ? (m => m.length) : undefined;
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; }
});
}
constructor() {
super({
method(m) {
return m.length;
},
});
}
}
```

更多信息,查看[\#1425](https://github.com/Microsoft/TypeScript/issues/1425)[\#920](https://github.com/Microsoft/TypeScript/issues/920)

## DOM接口的改动
## DOM 接口的改动

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

**变通方案:**

你可以使用旧的`lib.d.ts`配合新版本的编译器。你需要在你的工程里引入之前版本的一个拷贝。这里是[本次改动之前的lib.d.ts文件\(TypeScript 1.5-alpha\)](https://github.com/Microsoft/TypeScript/blob/v1.5.0-alpha/bin/lib.d.ts)
你可以使用旧的`lib.d.ts`配合新版本的编译器。你需要在你的工程里引入之前版本的一个拷贝。这里是[本次改动之前的 lib.d.ts 文件\(TypeScript 1.5-alpha\)](https://github.com/Microsoft/TypeScript/blob/v1.5.0-alpha/bin/lib.d.ts)

**变动列表:**

* 属性`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`
- 属性`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`

更多信息,查看[完整改动](https://github.com/Microsoft/TypeScript/pull/2739)

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

按照[ES6规范](http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-code),类代码体现在以严格模式进行解析。行为将相当于在类作用域顶端定义了`"use strict"`;它包括限制了把`arguments``eval`做为变量名或参数名的使用,把未来保留字做为变量或参数使用,八进制数字字面量的使用等。

按照[ES6 规范](http://www.ecma-international.org/ecma-262/6.0/#sec-strict-mode-code),类代码体现在以严格模式进行解析。行为将相当于在类作用域顶端定义了`"use strict"`;它包括限制了把`arguments``eval`做为变量名或参数名的使用,把未来保留字做为变量或参数使用,八进制数字字面量的使用等。
Loading

0 comments on commit 1f9ab31

Please sign in to comment.