问题
给定的
- global scripts
- **alpha.ts** contains a class named alpha
- **beta.ts** contains a class named beta
- **gamma.ts** contains a class named gamma
export default gamma.ts中在class gamma {}之前添加gamma.ts
gamma导入全局命名空间(即窗口对象),以便现有的全局和模块脚本能够访问它。我试过的
我试过很多关于global.d.ts的东西
例如:
import gammaAlias from "../scripts/gamma";
export as namespace NS_Global;
declare global {
var qqq: {n:string};
namespace ZZZ {
export var gamma: gammaAlias;
}
var gamma: gammaAlias;
}但是没有一个能起作用
也就是说,TypeScript告诉我以下几点之一
Cannot use 'new' with an expression whose type lacks a call or construct signature.github
我有一个github回购机构来调查这些问题。https://github.com/penguin020/expose-typescript-modules-globally ConvertToModulesPOC_original是工作的“先”的情况。 ConvertToModulesPOC是将gamma .ts转换为模块并在全局公开的失败尝试。
PS
问题仍然是,如何将模块公开到全局命名空间?
任何使用github中的例子的答案都将被特别感谢!
发布于 2019-11-26 20:39:22
我在“TypeScript:在全局上下文中公开模块类型及其避免的原因”中找到了答案;
我已经更新了github回购系统。
我发现最显著的变化是:
在tsconfig__中:
"module": "system",在yMod.ts
import gammaAlias from "../scripts/gamma.js";
declare global {
export type gamma = gammaAlias;
export const gamma: typeof gammaAlias;
}
(window as any).gamma = gammaAlias;注意:您可以将全局环境声明放在另一个文件中,甚至是一个*.d.ts文件中。
链接在上面详细分析了对每个符号进行全局公开的三个引用的原因。在这一页上已经很好地解释了这一点,所以我只在这里总结一下:
发布于 2019-12-01 19:35:52
我希望我正确理解了你的问题。您希望将“gamma”公开到全局命名空间,以便直接从“窗口”或控制台调用“gamma.log()”?
将以下2行添加到类底部的gamma.ts中。
let g = new gamma();
(window as any).gamma = g1)第一行将一个新的Gamma类初始化为变量g。
2)第二行将g导出到全局命名空间,以便可以从'window.g‘或简单地'g’调用它。
拉出请求1:https://github.com/penguin020/expose-typescript-modules-globally/pull/1/files
我还建议将这两行代码移到主初始化文件'app.js‘中。
gamma.ts
export default class gamma {app.ts
import gamma from "./gamma";
let g = new gamma();
(window as any).gamma = g拉出请求2:https://github.com/penguin020/expose-typescript-modules-globally/pull/2
发布于 2020-02-28 18:50:40
这对我有用。我只希望不用重命名界面。
declare global {
interface IMyClass extends MyClass { }
}
class MyClass {
}或
declare global {
type IMyClass = MyClass;
}
class MyClass {
}https://stackoverflow.com/questions/59000222
复制相似问题