将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
相关产品推荐
相关产品推荐

