当我尝试在浏览器中运行应用程序时,我在调试控制台窗口中收到以下消息:
Module name "Person" has not been loaded yet for context: _. Use require([])
当然,如果合并 .ts 文件的内容,一切都会正常工作。
我创建了Person.ts
file:
export interface IPerson {
firstName: string;
lastName: string;
}
export class Person implements IPerson {
private _middleName: string;
public set middleName(value: string) {
if (value.length <= 0)
throw "Must supply person name";
this._middleName = value;
}
public get middleName(): string {
return this._middleName;
}
constructor(public firstName: string, public lastName: string) { };
Validate() {
alert('test');
}
}
and the app.ts
file:
import {Person} from "./Person"
class Employee extends Person {
Validate() {
alert('new test inside Employee');
}
}
let p1 = new Person("Shahar", "Eldad");
p1.Validate();
try {
p1.middleName = "";
}
catch (err) {
alert(err);
}
let p2 = new Employee("Shahar", "Eldad");
p2.Validate();
document.body.innerHTML = p1.firstName + " " + p2.lastName;
最后我的index.html
file:
<!DOCTYPE html>
<html>
<head>
<meta charset="windows-1255">
<title>Insert title here</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.2/require.min.js" data-main="app.js"></script>
</head>
<body>
</body>
</html>
最后我的tsconfig.json
file:
{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"target": "es6"
},
"files": [
"app.ts",
"Person.ts"
]
}
我首先尝试使用目标 es5 进行转译,然后移至 es6(最后移至 tsconfig.json 文件)
Update
我确实喜欢@Louis,它似乎有效 - 复制了我的问题中的所有文件,并且只编辑了 tsconfig.json 以保存 amd 和 es5。我看不出复制前和复制后有什么区别。诡异的。