TypeScript Advanced (14)_Genérico y precauciones

Genéricos

inserte la descripción de la imagen aquí

la diferencia

1. No uses genéricos

const returnStr = (str: string): string => {
    
    
  return str;
};

const returnNumber = (num: number): number => {
    
    
  return num;
};

2. Usa genéricos

const returnFun = <T>(varData: T): T => {
    
    
  return varData;
};

console.log(returnFun<string>('123456'))
console.log(returnFun('liuqing'))//自动类型推论

La información que podemos aprender del ejemplo anterior:
1. El uso de genéricos puede lograr la reutilización
2. Después de usar genéricos, el método de llamada se puede escribir <xxx>o no, ts escribirá automáticamente la inferencia
3. T es una variable, puede ser cualquier carácter variable.

Arreglos genéricos

También podemos usar Array Generic Array para representar matrices:

let arr: Array<number> = [1,2,2,3];

Array<number>===number[]

Consulte: base de typeScript (6)_tipo de matriz

Parámetros de tipo múltiple

const returnFun = <T,G>(varData1: T,varData2:G): [T,G] => {
    
    
  return [varData1,varData2]
};
console.log(returnFun<string,number>('123456',123456)) //['123456',123456]

La función returnFun pasa dos tipos diferentes de datos y los devuelve como un tipo de tupla.

restricciones de tipo

interface Tface {
    
    
  length:number
}
const returnFun = <T extends  Tface>(varData: T): T => {
    
    
 
  return varData ;
};

console.log(returnFun<string>("123456"));
// console.log(returnFun<number>(123456)); //类型“number”不满足约束“Tface”


Cuando T deteriora esa Tface varias veces, se restringe T. En este momento, los parámetros que pasamos solo pueden pasar el valor que contiene el atributo de longitud.

interfaz genérica

interface Tface {
    
    
  <T>(zjq: T): T;
}

const myFun: Tface = <T>(aaa: T): T => {
    
    
  return aaa;
};

console.log(myFun("六卿"))

clase genérica

class F<T> {
    
    
  name: T;
  add: (num1: T) => T;
}

let f: F<string> = new F<string>();
f.name = "liuqing";
f.add = (num1: string) => num1;

Uso de parámetros de tipo en restricciones genéricas

Puede declarar un parámetro de tipo y está restringido por otro parámetro de tipo. por ejemplo

const myFun = <T extends G, G>(prop: T, obj: G): T => {
    
    
  return prop;
};

let x = {
    
     a: 1, b: 2, c: 3, d: 4 };

console.log(myFun(x, {
    
     b: 10, d: 20 }));

Lo anterior significa que el primer parámetro de la función myFun hereda el segundo parámetro, por lo que cuando se pasa el primer parámetro, se debe incluir el segundo parámetro. El rango de T solo puede ser más amplio que el de G.

Supongo que te gusta

Origin blog.csdn.net/qq_43291759/article/details/123874334
Recomendado
Clasificación