Javascript / Typescript: экспорт отдельных функций или константный класс?Какие есть различия? - PullRequest
0 голосов
/ 28 февраля 2019

Я занимаюсь разработкой веб-приложения на VueJs, Typescript и WebPack, и меня немного смущает то, как управлять / разбивать группы функций (утилиты и сервисы).В различных проектах в GitHub я видел, что некоторые функции объявляются и экспортируются непосредственно из файла, например:

utilities.ts

export function Sum(a:number, b:number):number{
    return a+b;
}

, это можно использовать с импортом:

import {Sum} from "./utilities.ts"

let result = Sum(5,6);

Другим распространенным решением является объявление класса const:

otherUtilities.ts

export const OtherUtilities = {
    Sum(a:number, b:number) : number => {
        return a+b;
    },

    Hello() : string => {
        return "Hello";
    }
}

и импорт в виде:

import {OtherUtilities} from "./otherUtilities.ts"

let result = OtherUtilities.Sum(5,6);

В чем различия?

ВВ прошлом была проблема с конфликтом имен в JS, но теперь с техникой экспорта / импорта через загрузчики эта проблема должна быть устаревшей, верно?

Спасибо

1 Ответ

0 голосов
/ 07 марта 2019

Этот объект:

export const OtherUtilities = {
    Sum(a:number, b:number) : number => {
        return a+b;
    },

    Hello() : string => {
        return "Hello";
    }
}

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

С другой стороны, если вы экспортируете их как отдельные объекты:

export function sum()...
export function hello()...

Они три встряхиваемых .Если ваше приложение импортирует только Hello(), их Sum можно выбросить из пакета.

Теперь, со второй стратегией, вы скорее получите коллизии имен.Вы можете предотвратить их, используя ключевое слово as:

 import {Sum} from 'one';
 import {Sum as myCustomSum} from 'two';

Помимо трех сотрясений, я не думаю, что есть большая разница между одним стилем или другим.Вы можете экспортировать что угодно с модулями ecmaScript, будь то функции, строки, числа или любые другие виды примитивов, массивов или объектов.Это в значительной степени зависит от вас и от кодовых соглашений вашей команды.

Некоторые библиотеки раньше экспортировали независимые функции, принадлежащие большому служебному объекту, но затем изменили стиль и переключились на независимые именованные экспорты, именно для того, чтобы включить тривстряхивание (а иногда это делают только независимые проекты, например lodash-es ).

...