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

问题描述 投票:0回答:1

我正在寻找有关如何使用 TypeScript 在 NodeJS 中导出和导入工作的信息。

我的设置是:

  • NodeJS
  • Typescript 中的一切
  • 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 几乎对我输入的任何内容都向我尖叫……这极其令人沮丧,因为大多数错误都没有解释。值得使用吗?

问题清单不断,但我确信一旦回答了上述一些问题,我就可以解决其余问题。

node.js import typescript tslint
1个回答
18
投票

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

  • commonjs 语法:
    var module = require ("module");
    可以工作,但那是 commonjs -> 没有打字
  • 它发生了变化:语法
    import x = require('y'
    ) 现已在 TS 中弃用

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

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

总的来说,我建议阅读这本优秀的手册,它将为您提供大多数问题的答案

导入

来自默认导出

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

使用

import Something from "module"

您实际上可以导入具有不同名称的默认导出。

import SomethingElse from 'module'
也可以工作

来自命名导出

Something
使用 ts/es6 中的
export {Something}
export class|interface Something{}
导出为“模块”中的命名导出

您只想导入该内容,请使用

import {Something} from "module"    

您想要导入从名称空间下的“模块”导出的所有内容

mod

import * as mod from "module

然后使用

const c:mod.Something = whatever

导出

参见上面的

import

export = something
形式已被弃用,取而代之的是新的 ES6 样式语法。它主要出现在定义文件中,以表达 js 库导出单个函数/对象的事实,例如
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,前两个是免费的,第三个甚至可以为您管理导入。

© www.soinside.com 2019 - 2024. All rights reserved.