我正在寻找有关如何使用 TypeScript 在 NodeJS 中导出和导入工作的信息。
我的设置是:
我正在搞乱导出/导入,而不是做一些正确的编码,这让我发疯,并且找不到任何关于它如何工作的正确解释。
导入
以下是什么意思?
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;
问题
我似乎无法找到正确的导出与导入方法,因此我的 IDE 没有被红色覆盖,也没有向我抛出数百个错误。
一般问题
问题清单不断,但我确信一旦回答了上述一些问题,我就可以解决其余问题。
同意,导入/导出语法令人困惑,至少有两个原因:
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
导出:它们的优点是可以使用不同的名称导入,但是
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,前两个是免费的,第三个甚至可以为您管理导入。