Правильное объяснение для NodeJS/Typescript Экспорт/импорт?

Может кто-нибудь объяснить, как именно экспорт и импорт работают в NodeJS с помощью Typescript?

Моя настройка:

  • 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 кричит на меня почти на все, что я набираю... это крайне расстраивает, так как для большинства ошибок есть 0 объяснений. Стоит ли даже использовать его?

Список вопросов продолжается и продолжается, но я уверен, что, как только на некоторые из вышеперечисленных вопросов ответят, я могу подобрать остальные.

Спасибо и извините за такой общий вопрос, но мой уровень разочарования только достиг вершины...

Ответ 1

Согласованный, синтаксис импорта/экспорта запутан по крайней мере по двум причинам:

  • Синтаксис commonjs: var module = require ("module"); работает, но это commonjs → no typings
  • он изменился: синтаксис import x = require('y') теперь устарел в TS

TL; DR;: используйте синтаксис 'es6 style', введенный в TS 1.5

"Лучший" ресурс по импорту/экспорту в TS, который я знаю, this

В целом я рекомендую прочитать этот отличный справочник, который предоставит ответы на большинство ваших вопросов.

Чтобы импортировать

От экспорта по умолчанию

Something экспортировался как экспорт по умолчанию (один), т.е. export default Something в ts/es6

Использование

import Something from "module"

Фактически вы можете импортировать экспорт по умолчанию с другим именем. import SomethingElse from 'module' также будет работать

От имени экспорта

Something был экспортирован как именованный экспорт в "модуль" с использованием export {Something} или export class|interface Something{} в ts/es6

Вы хотите импортировать только это, используйте

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 (не говоря уже о себе) при рефакторинге
  • именованный экспорт может быть фактически переименован при импорте i.e. import {Something as SomethingElse} from "module"

Конкретно, экспортируйте все, что нужно экспортировать, и импортируйте его специально

В api.ts

export interface MyInterface {
}

export class MyClass {
}

В main.ts

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

пылеобразования

Есть много хороших IDE, которые обеспечивают отличную листинг: VSCode, Atom Typescript и Webstorm, чтобы назвать популярные несколько, первые два являются бесплатными, а третий даже управляет импортом.