4.3 āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ āĻ āĻāĻā§āϏāĻā§āύā§āĻĄāĻŋāĻ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ
āĻā§āύā§āϰāĻŋāĻ āĻĢāĻžāĻāĻļāύ āĻŦāĻž āĻāύā§āĻāĻžāϰāĻĢā§āϏā§āϰ āĻŽāϤāĻ āĻāĻāĻāĻŋ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āύāĻžāĻŽā§āϰ āĻĒāϰ āĻāĻā§āĻā§āϞ āĻŦā§āϰā§āϝāĻžāĻā§āĻā§ (<>) āĻāĻ āĻŦāĻž āϤāϤā§āϧāĻŋāĻ āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āĻĨāĻžāĻā§āĨ¤ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏā§āϰ āĻāĻāĻāĻŋ āĻāĻĻāĻžāĻšāϰāύ āĻĻā§āĻā§ āύā§ā§āĻž āϝāĻžāĻ:
class GenericExample {
numberValue: NumType;
stringValue: StringType;
constructor(numberValue: NumType, stringValue: StringType) {
this.numberValue = numberValue;
this.stringValue = stringValue;
}
}
āϞāĻā§āώ āĻāϰā§āύ GenericExample āĻā§āϞāĻžāϏā§Â NumType āĻāĻŦāĻ StringType āĻĻā§āĻāĻāĻŋ āĻā§āύā§āϰāĻŋāĻ āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰāĻž āĻšā§ā§āĻā§āĨ¤ āĻāĻ āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĻā§āĻā§āĻā§ āĻā§āϞāĻžāϏā§āϰ āĻ āύā§āϝāĻžāύā§āϝ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋ āĻāĻŦāĻ āĻāύā§āϏāĻā§āϰāĻžāĻā§āĻāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ āĻā§āϞāĻžāϏāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰāĻž āϝāĻžā§ āĻāĻāĻžāĻŦā§:
let myGenericExample = new GenericExample(0, 'Hello');
console.log(myGenericExample.numberValue); // prints 0
console.log(myGenericExample.stringValue); // prints 'Hello'
āĻāĻāĻžāύ⧠āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ number āĻāĻŦāĻ string āĻāĻžāĻāĻĒ āϏā§āĻĒā§āϏāĻŋāĻĢāĻžāĻ āĻāϰ⧠āĻĻā§ā§āĻž āĻšā§ā§āĻā§āĨ¤ āĻāĻŦāĻ āĻā§āϞāĻžāϏ āĻāύā§āϏāĻā§āϰāĻžāĻā§āĻāϰ⧠āĻĻā§āĻāĻāĻŋ āĻā§āϝāĻžāϞ⧠āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻšāĻŋāϏā§āĻŦā§ āĻĒāĻžāĻ āĻžāύ⧠āĻšā§ā§āĻā§āĨ¤ āĻāĻŽāϰāĻž āĻāĻžāύāĻŋ āϝ⧠āĻāϰā§āĻā§āĻŽā§āύā§āĻ āĻ āĻāĻŽāϰāĻž āĻāĻ āϏā§āĻĒā§āϏāĻŋāĻĢāĻŋāĻ āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āĻāĻžā§āĻž āĻ āύā§āϝ āĻā§āύ āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻžāĨ¤Â
āĻāĻā§āϏāĻā§āύā§āĻĄāĻŋāĻ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ:
āĻāĻŽāϰāĻž āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ āĻāĻā§āϏāĻā§āύā§āĻĄ āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻā§āϞāĻžāϏ⧠āĻāĻŋāĻā§ āĻĢāĻŋāĻāĻžāϰ āϝā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻāĻāĻāĻŋ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ āĻāĻā§āϏāĻā§āύā§āĻĄ āĻ āĻĒāĻžāϰā§āĻāϰā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻā§āϏāĻā§āύā§āĻĄ āĻāϰāĻž āϝāĻžā§ āĨ¤ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻāĻāĻŋ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ āϤā§āϰāĻŋ āĻāϰāĻž āϝāĻžāĻ:Â
interface Product {
name: string;
price: number;
}
class Store {
protected _object: T[] = [];
add(obj: T): void {
this._object.push(obj)
}
}
āĻāĻāĻžāύ⧠āĻā§āϞāĻžāϏā§āϰ āĻā§āϤāϰ⧠āĻāĻāĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻŽā§āĻĨāĻĄ āĻĄāĻŋāĻā§āϞāĻžāϰ āĻāϰāĻž āĻšā§ā§āĻā§ āϝāĻž T āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϞ⧠āĻ āĻŦāĻā§āĻā§āĻ āĻ āĻĒā§āĻļ āĻāϰāĻŦā§āĨ¤ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋāϤ⧠protected āĻāĻŋāĻā§āĻžāϰā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰāĻž āĻšā§ā§āĻā§ āϝā§āύ āĻāϰ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋ āϏāĻžāĻŦāĻā§āϞāĻžāϏ āĻĨā§āĻā§ āĻāĻā§āϏā§āϏ āĻāϰāĻž āϝāĻžā§āĨ¤
class StoreSubclass extends Store{
// StoreSubclass method here
}
āĻāĻāύ āϧāϰāĻž āϝāĻžāĻ āĻāĻŽāϰāĻž āĻāĻāĻāĻŋ āϏāĻžāĻŦāĻā§āϞāĻžāϏ āĻĨā§āĻā§ āĻŦā§āĻāĻā§āϞāĻžāϏ _object āĻāϰ āĻāϞāĻŋāĻŽā§āύā§āĻ āĻāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻāĻžāĻā§āĻāĻŋāĨ¤ āĻāĻāĻŋ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŽā§āĻĨāĻĄ āĻĄāĻŋāĻĢāĻžāĻāύ āĻāϰāĻž āϝāĻžāĻāĨ¤
class StoreSubclass1 extends Store {
findMethod(name: string): T | undefined {
return this._object.find(obj => obj.name === name)
}
// Property 'name' does not exist on type 'T[]'.
}
āĻāĻŽāϰāĻž āĻŽā§āĻĨāĻĄā§āϰ āĻā§āϤāϰ āĻĨā§āĻā§ āĻāĻāĻžāĻŦā§ āĻĄāĻ āύā§āĻā§āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰ⧠āĻ āĻŦāĻā§āĻā§āĻ āĻāϰ āĻā§āϝāĻžāϞ⧠āĻāĻā§āϏā§āϏ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§ āύāĻžāĨ¤ āϏā§āĻā§āώā§āϤā§āϰ⧠āĻāĻŽā§āĻĒāĻžāĻāϞā§āĻļāύ āĻāϰāϰ āĻĻā§āĻāĻžāĻŦā§āĨ¤ āϝā§āĻŽāύ: āĻāĻāĻžāύ⧠āϏāĻžāĻŦāĻā§āϞāĻžāϏā§āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ <T> āĻāĻžāύ⧠āύāĻž āĻ āĻŦāĻā§āĻā§āĻ āĻ name āύāĻžāĻŽā§āϰ āĻĒā§āϰā§āĻĒāĻžāϰā§āĻāĻŋ āĻāĻā§āĨ¤ āϏā§āĻā§āώā§āϤā§āϰ⧠āĻāĻŽāĻžāĻĻā§āϰ āϏāĻžāĻŦāĻā§āϞāĻžāϏā§āϰ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ⧠āϏā§āĻĒā§āϏāĻŋāĻĢāĻžāĻ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻšāĻŦā§ āĻāĻāĻžāĻŦā§āĨ¤
class StoreSubclass1 extends Store{
findMethod(name: string): T | undefined {
return this._object.find(obj => obj.name === name)
}
}
āĻ āύā§āϝāĻĻāĻŋāĻā§ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āϏāĻžāĻŦāĻā§āϞāĻžāϏāĻā§ āĻā§āύā§āϰāĻŋāĻ āĻāϰāϤ⧠āύāĻž āĻāĻžāĻ āϤāĻžāĻšāϞ⧠āĻā§āύā§āϰāĻŋāĻ āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻĢāĻŋāĻā§āϏ āĻāϰ⧠āĻĻāĻŋāϤ⧠āĻĒāĻžāϰāĻŦā§āĨ¤ āϝā§āĻŽāύ:
class fixedStore extends Store {
identity(category: string): Product[] {
return [];
}
}
āĻāĻāĻžāύ⧠āĻŦā§āĻāĻā§āϞāĻžāϏ āĻāϰ āĻāĻžāĻāĻĒ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰ āĻāύā§āĻāĻžāϰāĻĢā§āϏ āĻāĻžāĻāĻĒ āĻĻā§āĻŦāĻžāϰāĻž āĻĢāĻŋāĻā§āϏāĻĄ āĻāϰāĻžāĨ¤ āĻāĻāĻāĻŋ āĻā§āύā§āϰāĻŋāĻ āĻā§āϞāĻžāϏ āĻāĻā§āϏāĻā§āύā§āĻĄ āĻāϰāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻŽāϰāĻž āĻāĻāϰāĻāĻŽ āĻĢāĻŋāĻāĻžāϰ āĻā§āϞ⧠āĻāĻā§āϏāĻĒā§āϞā§āϰ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤