Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

111
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda