如何从嵌套对象创建字符串文字类型?

时间:2020-08-16 16:30:36

标签: typescript

假设我有一个形式如下的对象

const obj = {
  a: '',
  b: 0,
  c: {
     a: '',
     b: 0,
  },
};

现在我可以创建这样的类型:

type keys = keyof typeof obj;

相当于:

type keys = 'a' | 'b' | 'c';

但是我想要的是表格的类型:

type keys = 'a'
  | 'b'
  | 'c'
  | 'c.a'
  | 'c.b';

是否可以在TypeScript中构造这样的类型?

我的用例

因此,我正在使用electron-store管理我的配置文件。
该库公开了接受对象键的字符串路径以返回值的函数。

import Store from 'electron-store'
const store = new Store();

store.onDidChange(
  'c.a',
  (newVal, oldVal) => console.log(`New: ${newVal} Old: ${oldVal}`)
);

我将上面的调用包装到了另一个函数中,该函数返回一个Observable。

function get$(key: string) {
  return new Observable((subscriber) => {
    store.onDidChange(key, (newValue, oldValue) => {
      subscriber.next({ newValue, oldValue });
    });
  });
}

每当我将字符串传递给get $函数时,我都试图获取valild键路径的智能感知,这样我就无法将任何无效的键路径传递给该函数。

0 个答案:

没有答案