繁体   English   中英

嵌套keyof keyof T in Typescript

[英]Nested keyof keyof T in Typescript

我有一个这样的界面......

export interface IMyInterface {
  test1: {
    test1Sub: {
      test1SubSub: string
    }
  },
  test2: {
    test2Sub: {
      test2SubSub: string
    }
  }
}

我希望能够将嵌套级别的名称强类型化为通用 function 以提供 TypeScript 类似这样的智能感知,它在传递类型 T 的通用 class 中。

  getSetting = (level1: keyof T, level2: keyof keyof T) => {
    console.log(level1, level2)
  }

这可能吗? 我现在是怎么得到它的,它给了我这个警告,它适用于“test1”但不适用于“test1Sub”;

settings.getPageSettings('test1', 'test1Sub')

“test1Sub”类型的参数不可分配给“toString”类型的参数| “价值” | “toLocaleString”'

您不希望keyof keyof用于子级别,因为这将是keyof IMyInterface定义的每种类型的keys ,而是您想要keyof T[K]

这是一个快速的游乐场

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"'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM