【问题标题】:Undefine export after compile typescript to javascript将 typescript 编译为 javascript 后取消定义导出
【发布时间】:2018-09-08 19:33:28
【问题描述】:

我是新手使用打字稿。在我的项目中有淘汰赛ts,编译后(Intellij plugin auto compile ts -> js)

这是文件 sample.ts:

import * as ko from "knockout"; ko;

class HelloViewModel {
    language: KnockoutObservable<string>
    framework: KnockoutObservable<string>

    constructor(language: string, framework: string) {
        this.language = ko.observable(language);
        this.framework = ko.observable(framework);
    }
}

ko.applyBindings(new HelloViewModel("TypeScript", "Knockout"));

sample.js:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ko = require("knockout");
ko;
var HelloViewModel = /** @class */ (function () {
    function HelloViewModel(language, framework) {
        this.language = ko.observable(language);
        this.framework = ko.observable(framework);
    }
    return HelloViewModel;
}());
ko.applyBindings(new HelloViewModel("TypeScript", "Knockout"));

在浏览器上运行时,它会注意到错误:未捕获的 ReferenceError:export is not defined at sample.js:2

我尝试搜索但仍未找到解决方案。 如果你有办法解决它,请告诉我。

这是我的项目:https://github.com/hoangdangduy/StreamingVideoWeb

【问题讨论】:

    标签: javascript typescript knockout.js


    【解决方案1】:

    您的 JS 文件中缺少 define 语句。它应该看起来更像:

    define(["require", "exports", "knockout"], function (require, exports, ko) {
        "use strict";
        Object.defineProperty(exports, "__esModule", { value: true });
        ko;
        var HelloViewModel = /** @class */ (function () {
            function HelloViewModel(language, framework) {
                this.language = ko.observable(language);
                this.framework = ko.observable(framework);
            }
            return HelloViewModel;
        }());
        ko.applyBindings(new HelloViewModel("TypeScript", "Knockout"));
    });
    

    这是将您的代码复制粘贴到TypeScript REPL

    另外,你可以改变

    import * as ko from "knockout"; ko;
    

    import ko from "knockout";
    

    【讨论】:

    • file js 是由插件自动编译的,所以我不想手动添加定义。而且我还尝试按您所说的添加“定义”,但仍然注意到错误“未定义定义”
    • 啊,我明白了。然后看到这个答案stackoverflow.com/questions/43472778/…
    【解决方案2】:

    require/exports在浏览器中不存在。

    除了 TypeScript 之外,您还需要使用打包器,例如 webpack。

    或者,您可以尝试在您的tsconfig.json 中使用"module": "umd"

    【讨论】:

      【解决方案3】:

      谢谢大家,我解决了,在我的文件 ts 和 knokout ts 编译完成后,我使用 add requirejs 加载模块。

      【讨论】:

        猜你喜欢
        • 2021-04-15
        • 2021-05-10
        • 1970-01-01
        • 2017-08-02
        • 1970-01-01
        • 2021-01-09
        • 2017-09-14
        • 1970-01-01
        • 2019-07-05
        相关资源
        最近更新 更多