<t extended =“” object =“”>(值:T):T,但类型为字符串,其中以前类型为null

时间:2018-10-01 14:29:43

标签: typescript

我正在使用名为pathmirror的工具,它可以像这样转换对象:

{a: {b: null} }{a: {b: 'a.b'}

这对Redux操作名称很有帮助。

如何为此输入类型?

目前,我有:

declare module "pathmirror" {
  export default function<T extends object>(value: T): {[key in keyof T]: object|string};
}

但是object|string不能反映递归性。

1 个答案:

答案 0 :(得分:1)

您可以将递归类型与条件类型结合使用,以将所有原始类型的字段转换为string,同时保留任何object类型的结构。

类型如下:

type  StringKeysObject<T> = {
    [P in keyof T]: T[P] extends number | string | null | undefined | boolean ? string : StringKeysObject<T[P]>;
};


function paths<T extends object>(value: T): StringKeysObject<T>{
  return null as any;
};


let dd = paths({
  a: {
    b: null
  }
})
let s = dd.a.b // string