Typescript - 无法让 'import' 语句发挥作用

标签 typescript

使用 typescript ,我试图让“模块”和“导入”等工作,但我遇到了一些困难。我被要求举一个我的问题的例子,所以这里是;

我使用命名空间样式声明来尝试组织项目的各个部分,这就是我最好的工作方式,它帮助我摆脱困扰我的困惑,因此每个 typescript 页面都以命名空间开头,并且然后导出相应的类。

/app_content/scripts/admin/models/Item.ts

module website.admin.models {
   export class Item {
      // properties, etc
   }
}

/app_content/scripts/admin/ui/Component.ts

module website.admin.ui {
   export class Component {
      // properties, etc
   }
}

然后我将尝试在不同的文件中使用其中一个,正如我在许多教程中看到的那样;

/app_content/scripts/admin/views/ItemView.ts

import component = module('website.admin.ui.Component');
import item = module('website.admin.models.Item');

module website.admin.views {
   export class ItemView {
       // try to use stuff, do other stuff, etc.
   }
}

但是,我收到错误模块不能别名为非模块类型。我还没有让任何这些导入工作——更不用说我想要它们了。有什么可以做的吗?

我已经尝试将 Visual Studio 设置为在属性中使用 CommonJS 和 AMD 样式等。

最佳答案

删除模块声明

第一步是删除所有模块声明...

module website.admin.models {

所有这些都可以消失,因为您正在使用外部模块,因此文件 === 模块。文件的全部内容被视为一个模块。外部模块永远不会以任何方式弄脏全局命名空间,这很酷。

导入

如果没有模块声明,你的模块名称是什么?它是模块的路径,所以现在当你导入时,你可以这样做:

import component = require('./app_content/scripts/admin/ui/Component');

重要说明 - 不要添加文件扩展名。

重要的附加说明 - 使用 require 而不是 module(这在 TypeScript 规范中发生了变化)。

完整示例

所以你的代码现在看起来像这样......

/app_content/scripts/admin/models/Item.ts

export class Item {
    // properties, etc
}

/app_content/scripts/admin/ui/Component.ts

export class Component {
    // properties, etc
}

/app_content/scripts/admin/views/ItemView.ts

import Component = require('./app_content/scripts/admin/ui/Component');
import Item = require('./app_content/scripts/admin/models/Item');

export class ItemView {
    example() {
        var component = new Component.Component();
    }
    // try to use stuff, do other stuff, etc.
}

导出其他内容

额外的酷炫功能提醒!一旦你完成了上述工作,试试这个......

如果您不喜欢这种重复...

var component = new Component.Component();

如果 Component.ts 中只有一个类,您可以像这样导出该类来代替模块...

class Component {
    // properties, etc
}

export = Component;

现在你可以使用更漂亮的了:

var component = new Component();

在您的 ItemView.ts 文件中。

运行时

要在网络浏览器中真正开始这一切,您只需包含 require.js并告诉它您的顶级程序文件(例如,通常是 app.ts)。它将加载 app.ts,然后当遇到 require 时,它将加载该模块等等。

<script data-main="/scripts/app" src="/scripts/require.js"></script>

再次省略 data-main 属性中的文件扩展名。

关于Typescript - 无法让 'import' 语句发挥作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21412100/

相关文章:

刷新另一个页面时, Angular 路由重定向到主页

reactjs - react 查询 useMutation : is not assignable to parameter of type "mutationkey"

typescript 使用括号表示法访问对象的可选属性

angular - 如何在angular6中使用 typescript 获取当前年份

html - Angular 2复选框双向数据绑定(bind)

angular - 如何在angular 2中实现aop

javascript - 如何在 vue+ts 中正确注册组件?

node.js - 如何在 typescript 中使用 Node 配置?

angular - 为什么我不能在取消订阅后再次订阅同一个 EventEmitter

javascript - RxJS:forkJoin 似乎不起作用