Tengo una interfaz como esta...
export interface IMyInterface { test1: { test1Sub: { test1SubSub: string } }, test2: { test2Sub: { test2SubSub: string } } }Me gustaría poder escribir fuertemente los nombres de los niveles anidados en una función genérica para darle a TypeScript intellisense algo como esto que está en una clase genérica que pasa en Tipo T.
getSetting = (level1: keyof T, level2: keyof keyof T) => { console.log(level1, level2) }es posible? Como lo tengo en este momento me da este aviso, funciona bien para 'test1' pero no para 'test1Sub;
settings.getPageSettings('test1', 'test1Sub')
El argumento de tipo '"test1Sub"' no se puede asignar al parámetro de tipo '"toString" | "valorDe" | "toLocaleString"'
No desea keyof keyof para el subnivel, ya que serán las keys de cada tipo definidas por keyof IMyInterface , en su lugar, desea keyof T[K]
Aquí hay un patio de recreo rápido.
export interface IMyInterface { test1: { test1Sub: { test1SubSub: string } }, test2: { test2Sub: { test2SubSub: string } } } function getSetting<T extends IMyInterface, K extends keyof T>(level1: K, level2: keyof T[K]) { console.log(level1, level2) } // usage const myInterface:IMyInterface ={ test1: { test1Sub: { test1SubSub: 'subsub1' } }, test2: { test2Sub: { test2SubSub: 'subsub2' } } } getSetting('test1', 'test1Sub'); getSetting('test2', 'test1Sub'); // ^^^^^^^^ // Argument of type '"test1Sub"' is not assignable to parameter of type '"test2Sub"'