首页 > 解决方案 > 在打字稿的分隔文件中实现方法类

问题描述

我尝试在文件中定义一个类并在单独的文件中实现它的方法,以便使用延迟加载。

例如,这里是主类。

export default class Foo {

  private bar() {
    console.log("private bar");
  }

  public baz() {
    console.log("public baz");
  }
  
  public async qux(): Promise<void> {
    const { default: qux } = await import("./qux");
    return qux.call(this);
  }

}

这是“./qux.ts”的内容:

export default function qux() {
  this.bar()
  this.baz();
}

我在这个文件中遇到的第一个错误如下:

“'this' 隐含类型为 'any',因为它没有类型注释”

我也尝试"noImplicitThis": false在我的 tsconfig 中进行设置。这消除了我之前的错误,但我可以访问私有的 bar 方法,我不想要这个。


我通过删除函数绑定并改用类型化参数来尝试其他实现:

export default class Foo {

  private bar() {
    console.log("private bar");
  }

  public baz() {
    console.log("public baz");
  }
  
  public async qux(): Promise<void> {
    const { default: qux } = await import("./qux");
    return qux(this);
  }

}

这是“./qux.ts”的内容:

import Foo from "./Foo";

export default function qux(this: Foo) {
  this.bar()
  this.baz();
}

现在错误是:

“属性‘bar’是私有的,只能在类‘Foo’中访问”

我想受益于类修饰符(公共-私有-保护)和延迟加载。我应该使用什么模式?

标签: typescriptthislazy-loading

解决方案


推荐阅读