Skip to content

Commit 66e02b2

Browse files
authored
Update generics.md
1 parent 7a964bc commit 66e02b2

File tree

1 file changed

+9
-10
lines changed

1 file changed

+9
-10
lines changed

docs/types/generics.md

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ Consider the simple `Queue` (first in, first out) data structure implementation.
1414
```ts
1515
class Queue {
1616
private data = [];
17-
push = (item) => this.data.push(item);
18-
pop = () => this.data.shift();
17+
push(item) { this.data.push(item); }
18+
pop() { return this.data.shift(); }
1919
}
2020
```
2121

@@ -24,8 +24,8 @@ One issue with this implementation is that it allows people to add *anything* to
2424
```ts
2525
class Queue {
2626
private data = [];
27-
push = (item) => this.data.push(item);
28-
pop = () => this.data.shift();
27+
push(item) { this.data.push(item); }
28+
pop() { return this.data.shift(); }
2929
}
3030

3131
const queue = new Queue();
@@ -40,10 +40,9 @@ console.log(queue.pop().toPrecision(1)); // RUNTIME ERROR
4040
One solution (and in fact the only one in languages that don't support generics) is to go ahead and create *special* classes just for these constraints. E.g. a quick and dirty number queue:
4141

4242
```ts
43-
class QueueNumber {
44-
private data = [];
45-
push = (item: number) => this.data.push(item);
46-
pop = (): number => this.data.shift();
43+
class QueueNumber extends Queue {
44+
push(item: number) { super.push(item); }
45+
pop(): number { returnthis.data.shift(); }
4746
}
4847

4948
const queue = new QueueNumber();
@@ -59,8 +58,8 @@ Of course this can quickly become painful e.g. if you want a string queue you ha
5958
/** A class definition with a generic parameter */
6059
class Queue<T> {
6160
private data = [];
62-
push = (item: T) => this.data.push(item);
63-
pop = (): T => this.data.shift();
61+
push(item: T) { this.data.push(item); }
62+
pop(): T | undefined { return this.data.shift(); }
6463
}
6564

6665
/** Again sample usage */

0 commit comments

Comments
 (0)