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

如何在对象内部引用自身typeof类型?TypeScript技术问询

解决方案:在对象内部引用自身typeof类型的简洁严格类型化实现

你可以通过递归泛型类型 + satisfies 自动推断的组合来实现需求,既不需要显式定义复杂的泛型结构,也能保持严格的类型标注,同时将visibilityFn保留在对象内部。

实现代码

// 定义递归泛型Config类型,泛型自动推断children结构
type Config<Children extends Record<string, Config<any>> = {}> = {
    name: string;
    value: number;
    children?: Children;
    // visibilityFn的参数类型直接绑定到当前节点的children类型
    visibilityFn?: (children: Children) => boolean;
};

// 使用satisfies让TypeScript自动推断泛型参数,无需手动传递
const config = {
    name: 'config',
    value: 1,
    children: {
        one: {
            name: 'one',
            value: 1,
            // 显式标注参数类型为typeof config.children,TypeScript会自动推断具体结构
            visibilityFn: (children: typeof config.children) => children.two.value > 3
        },
        two: {
            name: 'two',
            value: 2,
        },
    },
} satisfies Config;

核心优势

  1. 无需显式泛型定义:satisfies Config会让TypeScript自动推导泛型参数Children的具体结构,复杂嵌套场景下不会产生冗余代码。
  2. 严格类型标注:visibilityFn的参数通过typeof config.children显式标注,TypeScript会提供完整的类型提示与检查(比如children.two的存在性和类型都会被验证)。
  3. 代码简洁性:visibilityFn直接定义在对象内部,无需拆分到外部,保持嵌套结构的可读性。

原理说明

  • 递归泛型Config<Children>确保每个节点的children类型与自身结构一致,形成完整的类型链。
  • satisfies关键字会对整个对象进行后验类型检查,允许在对象字面量内部使用typeof config.children引用自身未完全定义的类型,TypeScript会在检查阶段补全类型信息,避免循环引用报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:15:53