正确的解释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。