typescript - 在打字稿的分隔文件中实现方法类
问题描述
我尝试在文件中定义一个类并在单独的文件中实现它的方法,以便使用延迟加载。
例如,这里是主类。
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’中访问”
我想受益于类修饰符(公共-私有-保护)和延迟加载。我应该使用什么模式?
解决方案
推荐阅读
- qt - 单击按钮后,如何将不同变量的值添加到列表中?
- javascript - 为什么谷歌地图没有出现
- apache-spark - pyspark 代码在控制台中工作,但不在 zeppelin 中
- http - 使用 HTTPRoundTripper 重试
- php - 如果我运行已经在 laravel 中运行的 cron 作业会发生什么
- mysql - 你可以使用 git 在不同的机器上同步 docker 容器吗?
- git - 如何获取两个不同提交之间路径已更改的文件的差异?
- jenkins - 在 Jenkins 管道中转换 appsettings.json 文件
- sql - 在 Laravel 中将原始 SQL 转换为 Eloquent
- python - 如何规范化熊猫 DataFrame 并将其加载到 Django 后端