【问题标题】:Import classes into the global scope将类导入全局范围
【发布时间】:2016-08-08 20:28:59
【问题描述】:

我正在尝试将一个类导入全局范围,并且我能够做到,但是当我尝试扩展该类时,我收到一条错误消息:

类型 'any' 不是构造函数类型。

所以这就是我为得到该错误所做的事情:

ma​​in.ts

const MyClass = require('./core/MyClass');

class MyTestClass extends MyClass {

}

然后我尝试使用import MyClass from './core/MyClass',而不是 const,但这似乎只在当前文件的范围内,这对我也没有帮助。

core/MyClass.ts

export default class MyClass {

}

我已经尝试使用命名空间,它在 typescript 中按我想要的方式工作,但是一旦编译成 javascript,命名空间是未定义的。

有没有办法可以将我的类导入到全局范围内,并且在扩展类时不会出现上述错误?

【问题讨论】:

  • 如果你想在浏览器中声明全局变量,你可以随时使用window.MyClass = MyClass
  • 这样做我得到Cannot find name 'MyClass'.
  • import 还是require
  • 像这样:import MyClass = require('./core/MyClass'); window['MyClass'] = MyClass;
  • 试试import MyClass from './core/MyClass'。然后在window 上创建属性

标签: javascript typescript


【解决方案1】:

在你的代码中你有:

require('./core/MyClass');

如果您的文件中没有import / export,那么 TypeScript 会假定该文件是全局。但是,根据您对文件的使用情况(例如在 NodeJS 中或使用 webpack 之类的捆绑器)文件仍然是一个模块而不是全局

很酷,这样你就可以在全局上放一些东西,比如:

export default class MyClass {
}
(global as any).MyClass = MyClass;

确保包含node.d.ts 以获取global

更多

当然我也想警告default,因为你写的const / require 也是错误的。你需要像const {default} = require('module/foo'); 这样的东西。更多:https://basarat.gitbooks.io/typescript/content/docs/tips/defaultIsBad.html?

【讨论】:

  • 谢谢你这完美的作品!这几天我一直在找这个!
猜你喜欢
  • 2016-06-06
  • 2018-07-23
  • 2016-05-06
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多