【问题标题】:TypeScript – what is 'export import'?TypeScript – 什么是“导出导入”?
【发布时间】:2012-11-06 06:36:40
【问题描述】:

Apparently,你可以在 TypeScript 中说 'export import xx = module("xx")'。

但这意味着什么?我在规范中没有看到。

【问题讨论】:

  • 这个问题涉及大约 4 年前从 TypeScript 中删除的语法。

标签: typescript obsolete


【解决方案1】:

从 0.8.1.1 开始,当您导出扩展在其他模块中声明的类的类时,您显然需要使用此语法。

例如,在 0.8.1 中,您可以这样说:

import mUiBase = module("../UiBase");

export class BaseViewModel extends mUiBase.UiBase {
}

但在 0.8.1.1 中,这会给您一个错误“Exported class extends class from private module”,所以您需要这样做:

export import mUiBase = module("../UiBase");

export class BaseViewModel extends mUiBase.UiBase {
}

这大概是故意的,而不仅仅是一个错误。

【讨论】:

  • 我从 CodePlex 的讨论中了解到(目前找不到链接...)这是一个错误,导出导入是一种临时解决方法。
  • 我使用的是 0.8.1.1 ... 刚刚升级到 0.8.3,我所有的“导出导入”现在都是错误(可以简单地删除导出)。所以 JcFx 认为它是一个错误是正确的。奇怪的是史蒂夫描述了这个的真正用途,现在用那个做什么?
【解决方案2】:

良好的观察力。

这是一种组合技术,它使整个导入的模块就像在封闭模块中创建的外部模块一样。这是一个简短的示例:

module MyModule {
    export class MyClass {
        doSomething() {

        }
    }
}

declare module EnclosingModule {
    export import x = module(MyModule);
}

var y = new EnclosingModule.x.MyClass();

export 关键字本身使模块成为外部模块。在这种情况下,它使MyModule 成为封闭模块的外部模块,即使它最初并未在封闭模块内部定义。

为什么?

我想这是一种重用模块的便捷方式,而不是在不同的上下文中重复它们——使它们在多个地方都可以访问,这样做似乎是合乎逻辑的。

【讨论】:

  • 有趣的是,规范的第 9.2.2 节指出“无法导出在导入声明中声明的模块标识符。”除非我的术语有误,否则我们在上面不就是这样做的吗?
  • 它不能像这样开箱即用 - 但您可以在定义中使用它。即declare module SomeModule { export import stuff = module("stuff"); }
  • 注意。对于现在遇到此问题的其他人(例如我),我可以为您节省一些时间:这纯粹是历史性的,不再出现在 OP 链接的示例中。 import x = module 也变成了 import x = require。 (module(MyModule) 曾经有效吗?现在不重要了……)
  • @DanielEarwicker 确实——早在 2012 年,我们就一直在使用 0.8 版的 TypeScript,但语法完全不同。
猜你喜欢
  • 2017-10-20
  • 2018-07-02
  • 1970-01-01
  • 2021-08-09
  • 2015-08-23
  • 2017-01-22
  • 1970-01-01
  • 2015-05-08
  • 2022-12-07
相关资源
最近更新 更多