【问题标题】:Transpiled typescript unexpectedly adding 'default' export object转译的打字稿意外添加了“默认”导出对象
【发布时间】:2018-10-24 18:21:25
【问题描述】:

长期从事 C++ 工作的人,最近从事网络开发工作的人。我的应用程序有一个返回对象的 .js 文件:

define('moduleA', [...], function(...) {
    ...
    return {
        propertyA: /*boolean value*/,
        ...
    };
});

省略号与此问题无关。现在我有一个 .ts 文件,我试图在其中导入这个 Javascript 模块并在 Typescript 代码中引用它。我的打字稿看起来像:

//@ts-ignore
import moduleA from 'moduleA';

export class ModuleB {
    ...
    public someMethod() {
        if (moduleA.propertyA) {
            ...
        }
    }
    ...
}

这个Typescript在转译的时候,上面的Require语句是正确的,但是上面'someMethod'中转译的代码是:

if (module_a_1.default.propertyA) {
    ...
}

我不明白这个“默认”子对象是从哪里来的。就像现在一样,运行时会引发异常,因为无法在“未定义”上引用“propertyA”。如果“默认”不存在并且转译的代码是:

if (module_a_1.propertyA) {
    ...
}

那么它应该可以工作。我猜这是 Typescript 的一些新手错误。任何人都可以提供见解吗?提前致谢!

  • 史蒂夫

【问题讨论】:

    标签: typescript import


    【解决方案1】:

    这有帮助吗?

    import * as moduleA from 'moduleA';
    

    【讨论】:

    • 你好 - 它改变了转译的代码,但仍然有同样的问题。我现在有了这个:if (module_a_1.moduleA.propertyA) { 请注意,现在它不是“默认”,而是添加了一个“moduleA”子对象,这是我在导入语句中给它的引用名称。我仍在尝试访问未定义对象上的“propertyA”,因为它应该是:if (module_a_1.propertyA) { 才能正常工作。请注意,“module_a_1”是 Typescript 转译器在 Require 语句中生成的名称。
    • @Steve 你能触摸一下.js 文件吗?它使用旧的 AMD 模块系统,我不太熟悉。如果它使用 es6 模块或至少 commonJS 会很容易
    • 嗨 Nurbol... 感谢您的快速回复。 .js 是我们的,但我正在尝试按原样使用它。如果将其导入另一个 .js 文件,它可以正常工作。只是试图让它在 .ts 文件中工作。
    • 看起来您编辑了答案。而且您更新的答案确实有效。谢谢!我仍然在追赶这些东西。
    猜你喜欢
    • 2017-02-06
    • 2016-01-23
    • 2016-02-10
    • 2019-12-11
    • 2021-02-07
    • 2018-04-17
    • 1970-01-01
    • 2017-09-23
    • 2020-09-14
    相关资源
    最近更新 更多