<>typeScript Generics in

* Definition of generics
* Generic Functions
* Generic class
* generic interface
<>1, Definition of generics

generic paradigm : In software engineering , We don't just have to create consistent well-defined API, Also consider reusability .
Components can not only support the current data type , It also supports future data types , This gives you very flexible functionality when creating large systems .

In the image C# and Java In such a language , You can use generics to create reusable components , A component can support multiple types of data . This allows users to use the component with their own data type .

folk understanding : Generics are solutions class Interface Method reusability , And support for unspecified data types ( Type verification )

<>2, Generic Functions

Can only return string Type of data

function getData(value:string):string{
return value;
}

Need to return at the same time string type and number type ( Code redundancy )
function getData1(value:string):string{
return value;
}
function getData2(value:number):number{
return value;
}

Return at the same time string type and number type ,any It can solve this problem
function getData(value:any):any{
return value+‘hello’;
}
getData(123);
getData(‘str’);

any Type checking abandoned , The parameter types passed in and returned can be inconsistent
//any There are problems , The type of value passed in , But the return value cannot be obtained Type of function getData<T>(value:T):any{ return
'2145214214'; } getData<number>(123); // Parameter must be number getData<string>(' This is a generic ');
If you need to pass in what Back to what . such as : afferent number Type must return number type afferent string Type must return string type

generic paradigm :
Is defined in the function / Interface / Class time , No specific type is specified in advance , A feature of the type is specified when it is used ;
It can support unspecified data types requirement : The parameters passed in are the same as those returned

T Represent generics , The specific type is determined when the method is called
//T Generic variable Represents any type function getData<T>(value:T):T{ return value; } getData<number>
(123); getData<string>('1214231'); getData<number>('2112'); /* Wrong way of writing */ //
Is defined in the function / Interface / Class time , No specific type is specified in advance , A feature of the type is specified when it is used ; //T Generic variable Represents any type function fun3<T>(
name:T):T{ console.log('hello ' + name); return name; }; fun3<string>('abc');
// After defining a generic function , How to pass in parameters // Define multiple types fun3<string | number>('abc');
<>3. Generic class

demand : For example, there is a minimum heap algorithm , Need to support both return numbers and strings a - z Two types . It is implemented by generics of classes
// The following one can only support numeric types class MinClass{ public list:number[]=[]; add(num:number){ this.
list.push(num) } min():number{ // var minNum = Math.min(...this.list) // Because you have to compare numbers
and character string , So use the following method var minNum=this.list[0]; for(var i=0;i<this.list.length;i++){ if(
minNum>this.list[i]){ minNum=this.list[i]; } } return minNum; } } var m=new
MinClass(); m.add(30); m.add(22); m.add(6); alert(m.min());
How to just numbers and numbers at the same time How about the parameter comparison size of the string ?

Using generics of classes
class MinClas<T> { public list: T[] = []; add(value: T): void { this.list.push(
value); } min(): T { var minNum = this.list[0]; for (var i = 0; i < this.list.
length; i++) { if (minNum > this.list[i]) { minNum = this.list[i]; } } return
minNum; } } // Instantiation class And a class of T The type of representation is number var m1=new MinClas<number>(); m1.add(11)
; m1.add(3); m1.add(2); alert(m1.min()) // Instantiation class And a class of T The type of representation is string var m2 =
new MinClas<string>(); m2.add("b"); m2.add("k"); m2.add("v"); alert(m2.min());
<>4. Function definition
// Function declaration function fun5<T>(name:T):T{ return name } // Function expression let fun6 = function<A>
(name:A):A{ return name; } //ES6 let fun7 =<U>(name:U):U => name;
<>5 generic interface

<>5.1 Function type interface
interface ConfigFn{ (value1:string,value2:string):string; } var setData:
ConfigFn=function(value1:string,value2:string):string{ return value1+value2; }
setData('name',' Zhang San ');
If you want to support return at the same time string,number Type interface , The above function interface does not meet the requirements

<>5.2 generic interface (1)

Defining generics in interfaces
interface ConfigFn{ <T>(value:T):T; } var getData:ConfigFn=function<T>(value:T)
:T{ return value; } getData<string>(' Zhang San '); // getData<string>(1243); // error
<>5.3 generic interface (2)
interface ConfigFn<T> { (value: T): T; } function getData<T>(value: T): T {
return value; } var myGetData: ConfigFn<string> = getData; myGetData("20");
/* correct */ // myGetData(20) // error // Interface interface Search{ <T>(a:T,b:T):boolean; } //
Interface Search representative Yes 2 Parameters , The type is any type , And the parameter types are consistent , The interface returns boolean value // Here's how to use the interface : let f4:Search
= function<T>(str1:T,str2:T):boolean{ //void No return value return str1==str2; //true/false
} f4<number>(123,456)
<>5.4 The application of generics in classes
class A2<T>{ n:T; // Represents the type of the property constructor(num:T){ // The type of value this.n = num; } action(x
:T):T{ return x } }; var a2 = new A2<string>('abc'); // instantiation a2.action('3')
<>TypeScript Generic class A generic class that takes a class as a parameter type

Use the class as a parameter to constrain the type of data passed in
class User{ username:string | undefined; pasword:string | undefined;
constructor(username:string,pasword:string) { this.username = username; this.
pasword= pasword; } } class MysqlDb{ allUser:any[] = []; add(user:User):boolean{
console.log(user); this.allUser.push(user) return true; } getUsers(){ console.
log(this.allUser) } } var u1=new User(' Zhang San ','123456'); var u2=new User(' Li Si ',
'123456'); var Db=new MysqlDb(); Db.add(u1); Db.add(u2); Db.getUsers();
<>2 Array generics

// Array generics You can also use array generics Array To represent an array
let arr: Array = [1, ‘1’, true, 3, 5]; //number[]

<>3 Defines the type of return value T

We add the , among T A type used to refer to any input ,
Input at the end value: T And output Array You can use the .
function createArray2<T>(length: number, value: T): Array<T> { let result: T[]
= []; for (let i = 0; i < length; i++) { result[i] = value; } return result; }
createArray2<string>(3, 'x');

Technology
©2019-2020 Toolsou All rights reserved,
1190 Reverses the substring between each pair of parentheses leetcodemysql Joint index details You don't know ——HarmonyOS Create data mysql Library process Character recognition technology of vehicle license plate based on Neural Network A guess number of small games , use JavaScript realization Talking about uni-app Page value transfer problem pytorch of ResNet18( Yes cifar10 The accuracy of data classification is achieved 94%)C++ Method of detecting memory leak One is called “ Asking for the train ” A small village Finally got the train