在 Typescript 中使用自定义键压平对象

问题描述

我想扁平化对象并将返回值转换为类型。

例如:

const myObject = {
  names: {
    title: 'red',subtitle: 'green'
  },}
const returned = [...Object.values(flatten(myObject))] as const
// returns ['red','green']
type Type = typeof returned[number]

现在返回的变量是 ['red','green']

类型应该是 'red | 'green',但现在是一个字符串数组,因为返回的 typeof 是 string[]。 我想使用这种类型为我的组件输入 prop:

<Component name="red" /> //is correct,but
<Component name=`something different than "red" or "green"` /> //is incorrect.

扁平化功能:

type FlattenedObject = { [x: string]: string }

export const flattenDaisyChain = (obj: any): FlattenedObject => {
  const result: FlattenedObject = {}

  const transform = (wrapper: FlattenedObject | string,p?: string) => {
    switch (typeof wrapper) {
      case 'object':
        p = p ? p + '.' : ''
        for (const item in wrapper) {
          transform(wrapper[item],p + item)
        }
        break
      default:
        if (p) {
          result[p] = wrapper
        }
        break
    }
  }

  transform(obj)

  return result
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)