import * vs import {specificName} в TypScript / ES6?

декларация

declare module "MyModule" {

export function Foo() {...}
export function Bar() {...}

}

Мне просто нужно импортировать * как MyModule из «MyModule» ; MyModule . Foo (); где-то, как его импортировать?

import {Foo} from "MyModule";
Foo()

или

import {} from ...

Какой из них лучше другого? Имеются ли какие-либо последствия для импортирования всего экспорта в первую очередь?

Некоторые ссылки, которые я прочитал перед публикацией вопросов:

https://www.exratione.com/2015/12/es6-use-of-import-property-from-module-is-not-a-great-plan/

javascript,typescript,ecmascript-6,amd,

6

Ответов: 3


4

Импортировать только то, что необходимо для вашего кода, является, конечно, хорошей практикой . Скажем, кто-то пишет несколько тысяч строк кода, импортирующих все, а затем вы пытаетесь его проанализировать. Считаете ли вы, что вам легко узнать, какие функции, используемые в вашем коде, импортированы или нет? Очевидно, что это сомнительная и плохая практика .

Что касается производительности, я полагаю, что это не сильно повлияло.


3

import * as ...Синтаксис делает гася и шпионить функции очень сложных и , как правило , требует дополнительных библиотек , таких как rewire.js. Предостережение - это дрожание деревьев, также не работает. Я склонен поддерживать небольшие модули модулей и, возможно, включать только 2-3 модуля на модуль. Таким образом, я могу использовать import {} ...синтаксис для своих модулей и, Fooкогда это возможно, для сторонних модулей. Таким образом, сводя к минимуму потребность в встряхивании деревьев.


1

Если вам нужно использовать только Foo , я думаю, что лучше всего импортировать Foo. Это делает ваш код более четким, потому что, посмотрев на этот импорт, вы можете определить, какие элементы MyModuleэтого кода используются.

Это не влияет на производительность, потому что в любом случае вам нужно прочитать / загрузить весь файл.

Кроме того, не имеет значения, какой вариант вы выберете при использовании такого пакета, как Rollup.js, даже если вы импортируете все MyModule, в комплект поставки будут включены только те вещи, которые вы фактически используете в своем коде.

JavaScript, машинопись, ECMAScript-6, AMD,
Похожие вопросы