对象的关键字keyof递归

时间:2017-07-04 06:02:14

标签: javascript typescript

是否可以递归地从Typescript中的关键对象获得强类型?

这是我的示例代码。

const test = {
  name: 'abc',
  author: {
    email: 'abc@example.com',
    url: 'http://example.com/'
  }
}

type AType = keyof typeof test
type AObjectKeyToValue = {
  [K in AType]: K  // <- K is just the keys!
}

然后我想创建一个使用AObjectKeyToValue类型的新变量,这样我就能从中获得电源自动完成功能。

const b: AObjectKeyToValue
b.
  ▾▾▾
  name
  author

正如您所看到的,我完全按照我的需要获得了自动完成功能。但是当我需要从author孩子那里获得自动填充时,我的问题就出现了。

const b: AObjectKeyToValue
b.author.
         ▾▾▾
         // Just string property. Can't find `email` and `url`

如何编写好的类型,以便在访问email时获得urlb.author.个键?

1 个答案:

答案 0 :(得分:1)

我们可以从值(在编译时确定)创建一个类型,并将其用于其他值:

let b: typeof test = ...;
b.author.email // will be of type "string"