Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
add default type params of generics
  • Loading branch information
jokester committed Oct 30, 2017
commit 85f5da4c6039d558aa50962f635e13b9a8b1ac86
18 changes: 16 additions & 2 deletions advanced/generics.md
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ interface CreateArrayFunc {

let createArray: CreateArrayFunc;
createArray = function<T>(length: number, value: T): Array<T> {
let result = [];
let result: T[] = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
Expand All @@ -175,7 +175,7 @@ interface CreateArrayFunc<T> {

let createArray: CreateArrayFunc<any>;
createArray = function<T>(length: number, value: T): Array<T> {
let result = [];
let result: T[] = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
Expand All @@ -202,6 +202,20 @@ myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
```

## 类型参数的默认类型

在 TypeScript 2.3 以后,我们可以为泛型中的类型参数指定默认类型。当使用泛型时没有在代码中直接指定类型参数,从实际 (值) 参数中也无法推测出时,这个默认类型会起作用。

```ts
function foo<T = number>(e?: T[]): T[] {
return (e ? e : []) as T[];
}

const specified: string[] = foo<string>([]);
const inferred: string[] = foo([""]);
const default_used: number[] = foo();
```

## 参考

- [Generics](http://www.typescriptlang.org/docs/handbook/generics.html)([中文版](https://zhongsp.gitbooks.io/typescript-handbook/content/doc/handbook/generics.html))
Expand Down