Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

110
Vistas
Cómo agregar tipo para hacer que el código a continuación no indique errores de tipo en mecanografiado
const obj = { extend: (p: { property: string; methods: { name: string; call: string; params: number }[]; }) => { obj[p.property] = {}; p.methods.forEach((m) => { obj[p.property][m.name] = (params: any[]) => m.call + "____" + params.length; }); }, }; obj.extend({ property: "Scope1", methods: [ { name: "functionName", call: "function_name", params: 1, }, ], }); // How to add type to make below code not prompt type errors in typescript. In typescript, this code below will prompt type errors. console.log(obj["Scope1"].functionName(["firstParam"]));

Cómo agregar tipo para que ese código no indique errores de tipo en mecanografiado. obj extender métodos, todos los métodos se pusieron en una propiedad.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Tiene un requisito muy genérico con respecto a cómo funciona extend() .

Para evitar los errores de tipo y hacerlo genérico, podemos definir un ObjectTemplate para satisfacer el compilador de TypeScript para que podamos asignar un valor al objeto sobre la marcha.

 type Args = { property: string; methods: { name: string; call: string; params: number }[]; } type ObjTemplate = { extend: (args: Args) => void; [k: string]: any } const obj: ObjTemplate = { extend: (p: Args) => { obj[p.property] = {}; p.methods.forEach((m) => { obj[p.property][m.name] = (params: any[]) => m.call + "____" + params.length; }); } }; obj.extend({ property: "Scope1", methods: [ { name: "functionName", call: "function_name", params: 1, }, ], }); console.log(obj["Scope1"].functionName(["firstParam"]));

Zona de juegos de código

about 4 years ago · Juan Pablo Isaza Denunciar

0

Según mecanografiado-interfaz-problema encuentro una respuesta.

 export const obj = { extend: <T extends string, O extends string>(a: { property: T; methods: { name: O; call: string; params: number }[]; }): { [Prop in typeof a as Prop["property"]]: { [Prop in typeof a.methods[number] as Prop["name"]]: ( ...args: any ) => Promise<any>; }; } => { const obj = {} as any; a.methods.forEach((method) => { obj[method.name] = (...args: any) => { return Promise.resolve("success"); }; }); const newObject = { [a.property]: obj, }; return newObject; }, }; const extendedObj = obj.extend({ property: "Scope1", methods: [ { name: "functionName", call: "function_name", params: 1, }, ], });

Después de eso, podemos conseguir esto.

ingrese la descripción de la imagen aquí

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda