Necesito definir una clase con accesorios dinámicos como 'Métodos'. yo escribí esto
type Methods = { [name:string]:Function } class App <M extends Methods> { [name: keyof M] : M[name] // dont work } var methods = { action : Function, move : Function } type M = keyof typeof methods; type myApp = App<typeof methods>;pero me sale los siguientes errores. ¿Se pueden arreglar?
Un tipo de parámetro de firma de índice no puede ser un tipo literal o un tipo genérico. Considere usar un tipo de objeto asignado en su lugar.
'nombre' se refiere a un valor, pero aquí se usa como un tipo. ¿Querías decir 'typeof name'?
El tipo de retorno de la firma de índice de la interfaz exportada tiene o está usando el nombre privado 'nombre'.
Parece que está buscando tipos mapeados . Esos solo funcionan para declaraciones de type , no para class es:
type App<M extends Methods> = { [name in keyof M]: M[name]; }Si realmente desea definir una clase, debe hacerlo con un tipo concreto:
var methods = { action: Function, move: Function } type MyApp = App<typeof methods>; class TheApp implements MyApp { action!: typeof Function; move!: typeof Function; constructor() { Object.assign(this, methods); } }