Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

112
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!