NodeJS / Typescript导出/导入的正确解释?

时间:2016-02-17 11:41:45

标签: node.js import typescript tslint

有人可以使用Typescript准确解释导出和导入在NodeJS中的工作原理吗?

我的设置是:

  • 的NodeJS
  • 打字稿中的所有内容
  • TSLint
  • 分型

我正在搞乱出口/进口,而不是做一些正确的编码,它让我疯狂,并且找不到任何正确的解释它是如何工作的。

导入

请您解释一下:

var module = require ("module");

import module = require("module");

import module from "module";

import {something} from "module";

import * as module from "module";

导出

您能否解释一下

export = something;

export default something;

export interface|class something;

问题

  • 如何在不启动类的情况下正确导出/导入类
  • 如何正确导出/导入一个启动它的类(构造确实运行)
  • 如何正确导出/导入类和接口
  • 如何正确导出/导入类和多个接口
  • 什么时候使用模块声明,如果我尝试使用它们,为什么tslint会向我抛出错误。

我似乎无法找到正确的导出与导入的方法,因此我的IDE不会被红色覆盖并向我抛出数百个错误。

一般问题

  • 有没有办法不使用nodejs / typescript / tslint获取错误?
  • TSLint几乎对我打字的任何东西都在尖叫......它非常令人沮丧,因为大多数错误有0个解释。是否值得使用它?

问题列表一直在继续,但是我确定一旦上面的一些问题得到解答,我就可以了解其余问题。

谢谢你,对于这样一个普遍的问题感到抱歉,但我的沮丧程度刚刚达到顶峰......

1 个答案:

答案 0 :(得分:12)

同意,导入/导出语法至少有两个原因令人困惑:

  • commonjs语法:var module = require ("module");有效,但这是commonjs - >没有打字
  • 它已更改:语法import x = require('y')现已在TS
  • 中弃用

TL; DR; :使用TS 1.5中引入的'es6 style'语法

我知道TS中导入/导出的“最佳”资源是this

总体而言,我建议您阅读此excellent handbook,这将为您的大部分问题提供答案

导入

从默认导出

Something被导出为默认(单个)导出,即ts / es6中的export default Something

使用

import Something from "module"

您实际上可以使用其他名称导入默认导出。 import SomethingElse from 'module'也可以使用

来自指定的出口

Something使用export {Something}或{/ 1}}在ts / es6

中导出为“模块”中的命名导出

您只想导入,请使用

export class|interface Something{}

您想要导入从名称空间import {Something} from "module"

下的“module”导出的所有内容
mod

然后使用import * as mod from "module

导出

请参阅上面的const c:mod.Something = whatever

不推荐使用表单import以支持新的ES6样式语法。它主要在定义文件中找到,以表示js库导出单个函数/对象的事实,例如export = something

您应该尝试使用

使用ES6样式语法并避免导出module.exports=something:它们的优点是可以使用其他名称导入它们,但

  • 无法重新导出默认导入,如果您正在编写库
  • ,这可能会有问题
  • 重构
  • 时会混淆很多IDE(更不用说自己)了
  • 导入的名称导出实际上可以在本地重命名,即default

具体而言,导出需要导出的内容并专门导入

import {Something as SomethingElse} from "module"

api.ts

export interface MyInterface { } export class MyClass { }

main.ts

掉毛

有许多好的IDE可以提供优秀的linting:VSCode,Atom Typescript和Webstorm来命名一个受欢迎的少数,前两个是免费的,第三个甚至管理你的导入。