如何使用普通javascript访问打字稿模块?

时间:2018-08-15 02:13:25

标签: typescript

因为我是打字稿新手,所以可能做错了,但是我创建了一个模块,我想一整天都在看教程,让我在C#中创建一个类,而我这样做是这样的:

export default class MyClass {

}

现在,据我了解,以打字稿创建此类的新实例,我会这样做:

import t from './MyClass';
var something = new t();

但是,在我的情况下,我的文件是js文件,而不是ts文件,因为我需要在html页面的底部进行操作。

但是我不知道怎么做,new Myclass()给了我一个未定义的错误。

尽管看了几本教程,但我仍在尝试导入和导出的概念,所以我可能做错了事,但是我只想创建一个干净的项目,因此使mt相信这是做到这一点的方法。 / p>

我还应该补充一点,我必须像这样添加模块:

<script type="module" src="~/Scripts/Proj/MyClass.js"></script>

我以前从未使用过type="module",没有它就无法使用,我在随机的SO帖子上找到了它。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我不知道全局脚本访问模块的任何方式。相反,您需要编写一个模块,将要在全局脚本中使用的所有内容复制到全局变量(即窗口的属性)中。如果愿意,您可以直接在MyClass.ts中进行此操作(为简单起见,我将这样做)或在单独的模块中进行。

第二个问题是modules are always deferred,因此要使全局脚本在模块之后运行,您需要使用this question中的一种方法来推迟全局脚本。

工作示例:

index.html:

<html>
<body>
<script type="module" src="./MyClass.js"></script>
<script defer src="global.js"></script>
</body>
</html>

MyClass.ts:

export default class MyClass {

}
(<any>window).MyClass = MyClass;

global.js:

console.log(new MyClass());

带有简单全局TypeScript脚本的示例

MyClass.ts:

class MyClass {}

index.html:

<html>
<body>
<script src="MyClass.js"></script>
<script>
console.log(new MyClass());
</script>
</body>
</html>

具有TypeScript名称空间的示例

MyClass.ts:

namespace MyNamespace {
  export class MyClass {}
}

index.html:

<html>
<body>
<script src="MyClass.js"></script>
<script>
console.log(new MyNamespace.MyClass());
</script>
</body>
</html>