gpt4 book ai didi

javascript - 尚未为上下文 : _. 加载 TypeScript 导出和导入模块名称使用 require([])

转载 作者:行者123 更新时间:2023-11-30 11:45:26 25 4
gpt4 key购买 nike

当我尝试在浏览器中运行应用程序时,我在调试控制台窗口中收到以下消息:

Module name "Person" has not been loaded yet for context: _. Use require([])

当然,如果合并 .ts 文件的内容,则一切正常。

我创建了 Person.ts 文件:

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');
}
}

app.ts 文件:

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 文件:

<!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 文件:

{
"compilerOptions": {
"module": "commonjs",
"noImplicitAny": true,
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"target": "es6"
},
"files": [
"app.ts",
"Person.ts"
]
}

我首先尝试使用目标 es5 进行转译,然后我转移到 es6(最后转移到 tsconfig.json 文件)

更新

我确实喜欢@Louis,它似乎有效——从我的问题中复制了所有文件,只编辑了 tsconfig.json 来保存 amd 和 es5。我看不出复制前后有什么区别。很奇怪。

最佳答案

使用 "module": "commonjs"当你想让 RequireJS 加载 TypeScript 编译器的输出时,肯定是错误的。你应该使用 "module": "amd" . (您可能还需要将目标更改回 es5。)

你得到的错误是因为 "module": "commonjs" ,编译器将为您的 import {Person} from "./Person" 输出类似于此的代码:

var _Person = require("./Person");
var Person = _Person.Person;

调用require将导致 RequireJS 执行但会失败,因为 RequireJS 不直接支持此类代码。如果它在 define 中,上面的代码将起作用。像这样:

define(function (require) {
var _Person = require("./Person");
var Person = _Person.Person;

// Rest of the module.
});

当您使用 "module": "amd" 时,编译器生成类似于此代码段的代码并且它可以工作。

关于javascript - 尚未为上下文 : _. 加载 TypeScript 导出和导入模块名称使用 require([]),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41144959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com