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

TypeScript合并解构对象中Getter属性类型无法解析,求非强制类型方案

问题解析与解决方法

为什么访问器返回类型被识别为any?

当你在对象字面量里用扩展运算符合并f的返回值,同时定义get example()访问器时,TypeScript没法准确推断访问器中this的类型。扩展运算符带来的动态属性合并,让编译器无法确定this指向的最终对象的完整类型,只能把this推断为any,进而导致this.name + " example"的返回类型也变成any。

无需显式指定返回类型的解决方法

方法1:用类型断言明确this的类型

在访问器里通过类型断言告诉编译器this的具体类型,就能让TypeScript正确推断返回值类型:

function f(name: string) {
    return {
        name: name,
    }
}

function g(name: string) {
    return {
        ...f(name),
        get example() {
            return (this as ReturnType<typeof f>).name + " example";
        }
    }
}

方法2:先缓存f的返回值,直接引用变量而非this

把f(name)的结果存到变量里,访问器直接使用这个变量的属性,避开对this类型推断的依赖:

function f(name: string) {
    return {
        name: name,
    }
}

function g(name: string) {
    const baseObj = f(name);
    return {
        ...baseObj,
        get example() {
            return baseObj.name + " example";
        }
    }
}

这两种方式都不用给example访问器显式指定返回类型,TypeScript就能自动推断出它的返回类型是string。

内容的提问来源于stack exchange,提问作者A. L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:15:01