【发布时间】:2021-07-24 13:35:20
【问题描述】:
我想要的是这样的:
class ThemeExample <T> {
static theme : T;
static init(theme : T){
ThemeExample.theme = theme;
}
};
//config it
ThemeExample.init({
hello : 'hi'
})
//in another file access properties with auto completion
ThemeExample.theme.hello
但这不起作用。 TS2302: Static members cannot reference class type parameters.
尝试了其他一些方法,例如在函数中创建类并返回它,并在类中使用泛型函数。 仍然找不到让我初始化此配置一次的方法。 然后稍后访问主题并自动完成其他文件中的所有属性。 我需要这样的东西,请帮帮我,我太沮丧了。
【问题讨论】:
-
我怀疑你会得到比a factory function where you export what it returns 更好的东西。您不能轻易地改变单个变量的状态,即使您这样做了,也没有任何机制可以让这种状态更改跨文件边界持续存在;您需要导出
const“配置版本”并将其导入不同的文件中。如果满足您的需求,我可以写一个答案;否则我只能想象一个“这是不可能的,对不起”的答案。 -
@jcalz 感谢您的快速响应,现在您在同一个文件中拥有函数和导出 const。是否可以这样做,但不是在同一个文件中创建和导出,而是在一个文件并导出到另一个文件中?因为这个类最终应该进入一个模块,但是初始化必须留在用户端。
-
?是的,TS Playground 只支持一个文件。如果您想向我提供一个指向我可以 fork 和修改的 minimal reproducible example Web IDE 项目的链接,我会向您展示。您可以在模块中导出工厂函数,在另一个文件中可以导入工厂、创建类并导出该类,在第三个文件中您可以导入创建的类。但为了显示这一点,我需要一个多文件 IDE 链接
-
谢谢! codesandbox.io 可以完成这项工作,但无论如何,如果您发布示例代码作为答案就足够了。
标签: typescript generics types typescript-generics