You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现TypeScript泛型类型以解析嵌套属性的类型?

如何创建能解析嵌套属性类型的泛型类型

假设我有如下配置类型:

type Config = {
  parent: {
    child: boolean
  }
}

我希望实现类似如下的效果:

type ChildConfigType = NestedType<Config, 'parent.child'> // boolean
type ParentConfigType = NestedType<Config, 'parent'> // {child: boolean}

我已有非嵌套类型的基础实现:

function getProp<
    Type extends object,
    Key extends keyof Type
>(key: Key): Type[Key] {
    return {} as Type[Key]
}

getProp<Config>('parent')

同时我也有可用的非嵌套辅助类型:

type PropsOf<
    Type extends object
> = keyof Type

type TypeOfProp<
    Type extends object,
    Key extends PropsOf<Type>
> = Type[Key]

function getPropWithHelpers<
    Type extends object,
    Key extends PropsOf<Type>
>(key: Key): TypeOfProp<Type, Key> {
    return {} as TypeOfProp<Type, Key>
}

我还实现了NestedPropsOf辅助类型,可解析出扁平化的嵌套属性联合类型:

type NestedPropsOf<Type extends object> =
  {
    [key in keyof Type & (string | number)]: Type[key] extends object
    ? `${key}` | `${key}.${NestedPropsOf<Type[key]>}`
    : `${key}`
  }[keyof Type & (string | number)]

type NestedConfigProps = NestedPropsOf<Config> // 'parent' | 'parent.child'

我正尝试实现如下签名的函数:

function getNestedProp<
    Type extends object,
    Key extends NestedPropsOf<Type>
>(key: Key): NestedTypeOfProp<Type, Key> {
    return {} as NestedTypeOfProp<Type, Key>
}

getNestedProp<Config>('parent.child')

我开始觉得这可能无法实现,因为类型无法直接操作字符串,无法移除路径的第一个片段。

内容的提问来源于stack exchange,提问作者Flechto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:59:53