Skip to content

Commit

Permalink
Writing .d.ts files - 第一次校稿。
Browse files Browse the repository at this point in the history
  • Loading branch information
kkbruce committed Mar 23, 2016
1 parent 2d6082b commit ca68e6f
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions doc/zh-tw/Handbook.md
Original file line number Diff line number Diff line change
Expand Up @@ -2753,15 +2753,15 @@ identity = reverse; // Okay because (x: any)=>any matches (y: any)=>any
實際上,型別相容性是由賦值相容性來控制的甚至在`implements`和`extends`語句裡。
更多資訊,請參閱[TypeScript語言規範](http://go.microsoft.com/fwlink/?LinkId=267121).
## <a name="12"></a>書寫.d.ts文件
## <a name="12"></a>撰寫.d.ts文件
當使用外部JavaScript庫或新的宿主API時,你需要一個宣告檔(.d.ts)定義函式庫的shape。這個手冊包含了寫.d.ts檔的進階概念,並帶有一些例子,告訴你怎麼去寫一個宣告檔。
當使用外部JavaScript函式庫或新的宿主API時,你需要一個宣告檔(.d.ts)定義函式庫的形體。這個手冊包含了撰寫.d.ts檔的進階概念,並帶有一些例子,告訴你怎麼去寫一個宣告檔。
### <a name="12.1"></a>指導與說明
#### <a name="12.1.1"></a>流程
最好從函式庫的文檔開始寫.d.ts檔,而不是程式碼。這樣保證不會被具體實現所干擾,而且相比於JS程式碼更易讀。下面的例子會假設你正在參照文檔寫宣告檔
最好從函式庫的文件開始寫.d.ts檔,而不是程式碼。這樣保證不會被具體實作所干擾,而且相比於JS程式碼更易讀。下面的例子會假設你正在參考文件撰寫宣告檔
#### <a name="12.1.2"></a>命名空間
Expand All @@ -2771,11 +2771,11 @@ identity = reverse; // Okay because (x: any)=>any matches (y: any)=>any
#### <a name="12.1.3"></a>回呼函數
許多JavaScript庫接收一個函數做為參數,之後傳入已知的參數來呼叫它。當為這些型別與函數簽章的時候,不要把這個參數標記成選擇性參數。正確的思考方式是“會提供什麼樣的參數?”,不是“會使用到什麼樣的參數?”。TypeScript 0.9.7+不會強制這種選擇性參數的使用,參數選擇性的雙向協變可以被外部的linter強制執行。
許多JavaScript函式庫接收一個函數做為參數,之後傳入已知的參數來呼叫它。當撰寫這些型別與函數簽章的時候,*不要*把這個參數標記成選擇性參數。正確的思考方式是“會提供什麼樣的參數?”,而不是“會使用到什麼樣的參數?”。TypeScript 0.9.7之後不會強制這種選擇性參數的使用,參數選擇性的雙向協變可以被外部的linter強制執行。
#### <a name="12.1.4"></a>擴充與宣告合併
寫宣告檔的時候,要記住TypeScript擴充現有物件的方式。你可以選擇用匿名型別或介面類別型的方式宣告一個變數:
撰寫宣告檔的時候,要記住使用TypeScript規則擴充現有物件的方式。你可以選擇用匿名型別或介面類別型的方式宣告一個變數:
**匿名型別var**
Expand All @@ -2797,13 +2797,13 @@ interface SomePoint { z: number; }
MyPoint.z = 4; // OK
```
是否想讓你的宣告是可擴充的取決於主觀判斷。通常來講,儘量符合library的意圖
是否想讓你的宣告是可擴充的取決於主觀判斷。通常來講,儘量符合函式庫的意圖
#### <a name="12.1.5"></a>類的分解
#### <a name="12.1.5"></a>類別的分解
TypeScript的類會建立出兩個型別:執行個體型別,定義了型別的執行個體具有哪些成員;建構函式型別,定義了類建構函式具有哪些型別。建構函式型別也被稱做類的靜態部分型別,因為它包含了類的靜態成員
TypeScript的類別會建立出兩個型別:執行個體型別,定義了型別的執行個體具有哪些成員;建構函式型別,定義了類別建構函式具有哪些型別。建構函式型別也被稱做類別的靜態部分型別,因為它包含了類別的靜態成員
你可以使用typeof關鍵字來拿到類靜態部分型別,在寫宣告檔時,想要把類明確的分解成執行個體型別和靜態型別時是有用且必要的
你可以使用typeof關鍵字來拿到類靜態部分型別,在摝寫宣告檔時,想要把類別明確的分解成執行個體型別和靜態型別時是有用且必要的
下面是一個例子,從使用者的角度來看,這兩個宣告是等同的:
Expand Down Expand Up @@ -2832,14 +2832,14 @@ declare var A: A_Static;
這裡的利弊如下:
* 標準方式可以使用extends來繼承;分解的類不能。這可能會在未來版本的TypeScript裡改變:是否允許任何的extends運算式
* 都允許之後為類添加靜態成員
* 允許為分解的類再添加執行個體成員,標準版不允許
* 使用分解類的時候,為成員起合理的名稱
* 標準方式可以使用extends來繼承;分解的類別不能。這可能會在未來版本的TypeScript裡改變:是否允許任何的extends運算式
* 都允許之後為類別添加靜態成員
* 允許為分解的類別再添加執行個體成員,標準版不允許
* 使用分解類別的時候,為成員起合理的名稱
#### <a name="12.1.6"></a>命名規則
一般來講,不要給介面加I首碼(比如:IColor)。類為TypeScript裡的介面類別型比C#或Java裡的意義更為廣泛,IFoo命名不利於這個特點。
一般來講,不要給介面加I首碼(比如:IColor)。類別為TypeScript裡的介面類別型比C#或Java裡的意義更為廣泛,IFoo命名不利於這個特點。
### <a name="12.2"></a>例子
Expand All @@ -2854,7 +2854,7 @@ animalFactory.create("dog");
animalFactory.create("giraffe", { name: "ronald" });
animalFactory.create("panda", { name: "bob", height: 400 });
// 錯誤:如果提供選項,那麼必須包含name
// Invalid: name must be provided if options is given
animalFactory.create("cat", { height: 32 });
```
Expand Down

0 comments on commit ca68e6f

Please sign in to comment.