2016-10-15 2 views
3

Декларацияимпорт * vs import {specificName} в TypScript/ES6?

declare module "MyModule" { 

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

} 

мне просто нужно Foo где-то, как я должен импортировать его?

import * as MyModule from "MyModule"; 

MyModule.Foo(); 

или

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

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

Некоторые ссылки, которые я прочитал, прежде чем отправлять вопросы:

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

+2

Почему '* как MyModule' даже рассматривается здесь, если все, что вам нужно, это' Foo'? – estus

+0

http://stackoverflow.com/questions/147454/why-is-using-a-wild-card-with-a-java-import-statement-bad –

+1

@SandeepRoy Я говорю о javascript, и здесь он не загромождает Пространство имен. –

ответ

4

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

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

1

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

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

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

+0

Я не думаю, что мы используем какой-либо связной, который поддерживает treeshaking. –

1

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

Смежные вопросы