[英]import module typescript error
当我在app.ts脚本中导入模块时,已编译的js文件的导入行中缺少'.js'文件扩展名。
app.ts import {ModuleA} from './ModuleA'
编译的app.js import {ModuleA} from './ModuleA';
我将其包含在html文件中,例如<script type="module" src="app.js"></script>
但是浏览器找不到模块“ ModuleA”。
仅当我import {ModuleA} from './ModuleA.js'
但是我想通过导入“ .ts”模块文件而不是“ .js”模块文件来工作。
我本来希望ts编译将'.js'扩展名添加到导入行。
有什么建议么?
看来这是打字稿中的错误。 https://github.com/Microsoft/TypeScript/issues/13422 。
作品中没有解决方案。 目前,您的方法是正确的。
import {ModuleA} from './ModuleA.js'
您还可以使用webpack构建单个js文件。 然后,您无需添加扩展名。
如果您没有在命令行上为tsc
指定编译器选项,并且没有tsconfig.json
文件,则打字稿会使用默认值。 根据打字稿文档的默认值es3
用于发射的语言,并commonjs
用于模块加载器。 我发现这些选项不可接受,因此我在tsconfig.json
文件中指定了不同的选项。 尝试按以下步骤设置项目,我想您会对结果感到满意。 这似乎是一项艰巨的工作,但是您可以在完成后将项目导出到模板中,而无需再做一次。 假设您在计算机上设置了npm
。
在VS 2017中创建一个新项目,选择ASP.NET Web应用程序(.NET Framework)作为模板。 我知道这听起来可能不对,但是请您忍受,因为您最终将获得一个最小的项目,其中不包含您不想要的很多内容。 在向导的下一页上,选择“清空”,然后取消选中每个框,并使其不进行身份验证。 完成向导。
在项目的根级别添加以下文件。
的package.json:
{
"version": "1.0.0",
"name": "asp.net",
"author": "you",
"private": true,
"dependencies": {
"core-js": "^2.5.3",
"systemjs": "^0.21.0"
}
}
tsconfig.json:
{
"compilerOptions": {
"module": "system",
"target": "es5",
"noImplicitAny": true,
"noEmitOnError": true,
"sourceMap": true
},
"files": [
"app/app.ts"
],
"exclude": [
"node_modules"
]
}
system.config.js:
(function (global) {
SystemJS.config({
paths: {
'npm:': '/node_modules/'
},
map: {
app: '/app'
},
packages: {
app: {
main: 'app.js',
defaultExtension: 'js'
}
}
})
})(this);
index.html的:
<!DOCTYPE html>
<html>
<head>
<base href="/" />
<meta charset="utf-8" />
<title>Typescript with SystemJS and Modules Demo</title>
<script src="node_modules/core-js/client/shim.min.js"></script>
<script src="node_modules/systemjs/dist/system.js"></script>
<script src="system.config.js"></script>
<script>
SystemJS.import("app/app.js").catch(function (e) { console.log(e); });
</script>
</head>
<body>
<div id="personDiv"></div>
</body>
</html>
另外,创建一个app
文件夹,并将以下两个文件放入其中:
应用程式:
import { Person } from "./person";
export class App {
constructor() {
let person: Person = new Person();
let div: HTMLDivElement = <HTMLDivElement>document.getElementById('personDiv');
div.innerHTML = person.getName();
}
}
// Use this assignment to start execution.
let a: App = new App();
// The following doesn't appear to work with SystemJS. It does with plain TypeScript.
// It is probably because SystemJS already defines a listener for window.onload,
// although I haven't verified that.
//window.onload = () => {
// let a: App = new App();
// let person = new Person();
// alert(person.getName);
//}
person.ts:
export class Person {
fullName: string;
constructor() {
this.fullName = "Test Guy";
}
getName():string {
return this.fullName;
}
}
然后构建并运行该应用程序。 结果应显示导入工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.