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

有人能请解释如何使用Typescript在NodeJS中输出和input?

我的设置是:

  • 的NodeJS
  • 一切都在打字稿
  • TSLint
  • 分型

我正在搞出口/import,而不是做一些适当的编码,这使我疯狂,找不到任何正确的解释。

import

你可以请解释一下:

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; 

问题

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

我似乎无法find正确的出口与import的方式,所以我的IDE没有被红色覆盖,并向我抛出数百个错误。

一般的问题

  • 有甚至有一种方法不能使用nodejs / typescript / tslint获取错误吗?
  • TSLint正在尖叫我几乎所有我input的内容……这是非常令人沮丧的,因为对大多数错误的解释是0。 它甚至值得使用它吗?

问题列表在继续,但可以肯定的是,一旦上面的一些答案,我可以拿起其余的。

谢谢你,对于这样一个普遍的问题感到抱歉,但是我的挫折感已经达到了顶峰。

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

  • commonjs语法: var module = require ("module"); 作品,但这是常见的 – >没有types
  • 它改变了:语法import x = require('y' )现在在TS中被弃用了

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

在TS我input/输出的'最好的'资源我知道是这样的

总的来说,我build议阅读这本优秀的手册 ,它将提供大部分问题的答案

导入

从默认导出

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

使用

 import Something from "module" 

您可以实际导入具有不同名称的默认导出。 import SomethingElse from 'module'也将工作

从命名的出口

在“module”中使用export {Something}export class|interface Something{} in ts / es6将Something导出为命名导出

你只想导入,使用

 import {Something} from "module" 

您想要导入从命名空间mod下的“module”导出的所有内容

 import * as mod from "module 

然后使用const c:mod.Something = whatever

要导出

请参阅上面的import

表单export = something不赞成使用新的ES6样式语法。 它主要是在定义文件中发现,以expression一个事实,一个JS库导出一个单一的function/对象,例如module.exports=something

你应该尝试使用什么

使用ES6风格的语法,并避免default导出:它们的优点是可以使用不同的名称导入,但是

  • 默认导入不能被重新导出,如果你正在编写一个库,这可能会有问题
  • 他们会在重构时混淆许多IDE(更别说你自己了)
  • 一个命名的导出实际上可以在本地重新命名时导入,即import {Something as SomethingElse} from "module"

具体来说,出口需要出口的任何需求并专门导入

api.ts

 export interface MyInterface { } export class MyClass { } 

main.ts

  import {MyInterface, MyClass} from './api' 

掉毛

有很多好的IDE提供优秀的LINTING:VSCode,Atom Typescript和Webstorm来命名less数,头两个是免费的,第三个甚至pipe理你的import。