因为我是打字稿新手,所以可能做错了,但是我创建了一个模块,我想一整天都在看教程,让我在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帖子上找到了它。
有什么建议吗?
答案 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());
MyClass.ts:
class MyClass {}
index.html:
<html>
<body>
<script src="MyClass.js"></script>
<script>
console.log(new MyClass());
</script>
</body>
</html>
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>