Merge pull request #9 from freezestudio/master

Fix wording
This commit is contained in:
Shengping Zhong 2015-12-23 12:25:51 +08:00
commit a5e40d0cab
4 changed files with 32 additions and 30 deletions

View File

@ -22,7 +22,9 @@ Typescript中的声明会创建以下三种实体之一命名空间类型
|------------------|:---------:|:----:|:-----:|
| Namespace | X | | X |
| Class | | X | X |
| Enum | | X | X |
| Interface | | X | |
| Type Alias | | X | |
| Function | | | X |
| Variable | | | X |
@ -118,7 +120,7 @@ namespace Animals {
```
除了这些合并外,你还需要了解非导出成员是如何处理的。
非导出成员仅在其原始存在于的命名空间(未合并的)之内可见。这就是说合并之后,从其它命名空间合并进来的成员无法访问非导出成员
非导出成员仅在其原始存在于的命名空间(未合并的)之内可见。这就是说合并之后,从其它命名空间合并进来的成员无法访问非导出成员。
下例提供了更清晰的说明:

View File

@ -6,7 +6,7 @@
## `for..of` 语句
`for..of`会遍历可迭代的对象,调用对象上的`Symbol.iterator`属性
`for..of`会遍历可迭代的对象,调用对象上的`Symbol.iterator`方法
下面是在数组上使用`for..of`的简单例子:
```ts
@ -19,7 +19,7 @@ for (let entry of someArray) {
### `for..of` vs. `for..in` 语句
`for..of`和`for..in`均可迭代一个列表;但是用于迭代的值却不同,`for..in`迭代的是对象的*键*的列表,而`for..of`则迭代对象数字键对应的值。
`for..of`和`for..in`均可迭代一个列表;但是用于迭代的值却不同,`for..in`迭代的是对象的 *键* 的列表,而`for..of`则迭代对象的键对应的值。
下面的例子展示了两者之间的区别:
@ -34,8 +34,8 @@ for (let i of list) {
console.log(i); // "4", "5", "6"
```
一个区别是`for..in`可以操作任何对象;它提供了查看对象属性的一种方法。
但是`for..in`关注于迭代对象的值。内置对象`Map`和`Set`已经实现了`Symbol.iterator`属性,让我们可以访问它们保存的值。
一个区别是`for..in`可以操作任何对象;它提供了查看对象属性的一种方法。
但是`for..of`关注于迭代对象的值。内置对象`Map`和`Set`已经实现了`Symbol.iterator`方法,让我们可以访问它们保存的值。
```ts
let pets = new Set(["Cat", "Dog", "Hamster"]);
@ -78,4 +78,4 @@ for (var _i = 0; _i < numbers.length; _i++) {
#### 目标为 ECMAScript 2015 或更高
当目标为兼容ECMAScipt 2015的引擎时编译器会生成相应引擎的`for..of`内置迭代器实现方式。
当目标为兼容ECMAScipt 2015的引擎时编译器会生成相应引擎的`for..of`内置迭代器实现方式。

View File

@ -26,7 +26,7 @@ TypeScript的结构性子类型是根据JavaScript代码的典型写法来设计
## 关于可靠性的注意事项
TypeScript的类型系统允许一些在编译阶段无法否认其安全性的操作。当一个类型系统具此属性时被当做是“不可靠”的。TypeScript允许这种不可靠行为的发生是经过仔细考虑的。通过这篇文章我们会解释什么时候会发生这种情况和其有利的一面。
TypeScript的类型系统允许某些在编译阶段无法确认其安全性的操作。当一个类型系统具此属性时被当做是“不可靠”的。TypeScript允许这种不可靠行为的发生是经过仔细考虑的。通过这篇文章我们会解释什么时候会发生这种情况和其有利的一面。
# 开始

View File

@ -7,21 +7,21 @@
## 流程
最好从程序库的文档开始写.d.ts文件,而不是代码
最好从程序库的文档而不是代码开始写.d.ts文件。
这样保证不会被具体实现所干扰而且相比于JS代码更易读。
下面的例子会假设你正在参照文档写声明文件。
## 命名空间
当定义接口例如“options”对象你会选择是否将这些类型放进命名空间里。
这主要是靠主观判断 -- 使用的人主要是用这些类型声明变量和参数,并且类型命名不会引起命名冲突,放在全局命名空间里更好。
这主要是靠主观判断 -- 如果使用的人主要是用这些类型声明变量和参数,并且类型命名不会引起命名冲突,放在全局命名空间里更好。
如果类型不是被直接使用,或者没法起一个唯一的名字的话,就使用命名空间来避免与其它类型发生冲突。
## 回调函数
许多JavaScript库接收一个函数做为参数之后传入已知的参数来调用它。
为这些类型与函数签名的时候,不要把这个参数标记成可选参数。
正确的思考方式是“会提供什么样的参数?”,不是“会使用到什么样的参数?”。
用这些类型为函数签名的时候,不要把这些参数标记成可选参数。
正确的思考方式是“(调用者)会提供什么样的参数?”,不是“(函数)会使用到什么样的参数?”。
TypeScript 0.9.7+不会强制这种可选参数的使用参数可选的双向协变可以被外部的linter强制执行。
## 扩展与声明合并
@ -86,24 +86,24 @@ declare let A: A_Static;
这里的利弊如下:
* 标准方式可以使用extends来继承分解的类不能。这可能会在未来版本的TypeScript里改变是否允许任何的extends表达式
* 都允许之后为类添加静态成员
* 允许为分解的类再添加实例成员,标准版不允许
* 使用分解类的时候,为成员起合理的名字
* 标准方式可以使用extends来继承分解的类不能。也可能会在未来版本的TypeScript里做出改变是否允许任意extends表达式
* 都允许之后为类添加静态成员(通过合并声明的方式)
* 分解的类允许增加实例成员,标准版不允许
* 使用分解类的时候,需要多类型成员起合理的名字
## 命名规则
一般来讲不要给接口加I前缀比如IColor
类为TypeScript里的接口类型比C#或Java里的意义更为广泛IFoo命名不利于这个特点。
因为TypeScript的接口类型概念比C#或Java里的意义更为广泛IFoo命名不利于这个特点。
# 例子
下面进行例子部分。对于每个例子,先是使用*使用方法*,然后是类型声明。
下面进行例子部分。对于每个例子,首先使用*应用示例*,然后是类型声明。
如果有多个好的声明表示方法,会列出多个。
## 参数对象
#### 使用方法
#### 应用示例
```ts
animalFactory.create("dog");
@ -113,7 +113,7 @@ animalFactory.create("panda", { name: "bob", height: 400 });
animalFactory.create("cat", { height: 32 });
```
#### 类型
#### 类型声明
```ts
namespace animalFactory {
@ -128,14 +128,14 @@ namespace animalFactory {
## 带属性的函数
#### 使用方法
#### 应用示例
```ts
zooKeeper.workSchedule = "morning";
zooKeeper(giraffeCage);
```
#### 类型
#### 类型声明
```ts
// Note: Function must precede namespace
@ -147,7 +147,7 @@ namespace zooKeeper {
## 可以用new调用也可以直接调用的方法
#### 使用方法
#### 应用示例
```ts
let w = widget(32, 16);
@ -157,7 +157,7 @@ w.sprock();
y.sprock();
```
#### 类型
#### 类型声明
```ts
interface Widget {
@ -172,9 +172,9 @@ interface WidgetFactory {
declare let widget: WidgetFactory;
```
## 全局的/不清楚的Libraries
## 全局的或未知的外部Libraries
#### 使用方法
#### 应用示例
```ts
// Either
@ -184,7 +184,7 @@ x.open();
zoo.open();
```
#### 类型
#### 类型声明
```ts
declare namespace zoo {
@ -198,7 +198,7 @@ declare module "zoo" {
## 外部模块的单个复杂对象
#### 使用方法
#### 应用示例
```ts
// Super-chainable library for eagles
@ -214,7 +214,7 @@ var eddie = new Eagle('Mille');
eddie.kind = 'golden';
```
#### 类型
#### 类型声明
```ts
interface Eagle {
@ -232,13 +232,13 @@ export = Eagle;
## 回调函数
#### 使用方法
#### 应用示例
```ts
addLater(3, 4, x => console.log('x = ' + x));
```
#### 类型
#### 类型声明
```ts
// Note: 'void' return type is preferred here