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

将JavaScript迁移至TypeScript:如何处理`this`上的Object.defineProperties?

问题:类通过Object.defineProperties定义属性后,内部函数访问属性的TypeScript迁移问题

我正在尝试将一段JavaScript代码迁移至TypeScript,其中一个类的实现如下:

class Foo {
  constructor() {
    Object.defineProperties(this, {
      a: {
        value: 'a',
      },

      b: {
        value: 'b',
      },

      n: {
        writable: true,
        value: 0,
      },
    });

    assertFooApi(this);
  }

  reset() {
    this.a = 'a';
    this.b = 'b';
    this.n = 0;
  }
}

interface FooApi {
  a: string,
  b: string,
  n: number,
}

function assertFooApi(input: any): asserts input is FooApi {
  // intentionally fake
}

reset函数出现编译错误,原因是TypeScript中Object.defineProperties不会影响类的类型签名。我并非原JavaScript代码的作者,也未完全理解其逻辑,希望在不修改原有行为的前提下定义this的类型,尽可能少地改动现有实现。后续我会为其编写自动化测试以便调整实现,但当前第一步是完成TypeScript迁移。

我看到过针对这类问题的两种解决方案,但它们似乎无法应用于this对象——正如代码示例中所示,对this使用断言函数无法修改其内部类型。

请问,当类通过Object.defineProperties在this上定义属性时,如何在其他内部函数中使用这些属性而不出现编译错误?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:40:08