Как изолировать private static functions класса в другой файл.

В моем component.ts у меня много статических функций, и мне нужно поместить их в другой файл ts для лучшей читабельности. Как я могу это сделать ?

Например, мы можем поместить интерфейсы в другой файл и экспортировать их. Есть ли что-то похожее для статических функций?

Желаемый результат: я могу вызвать Component.foo() в файле component.ts , но private static foo() существует в файле logic.ts . Возможно ли это сделать?

-1
dota2pro 16 Авг 2019 в 18:20

2 ответа

Лучший ответ

Вы не можете делать то, что вы просите.

Вы можете легко создать внешний класс для статических файлов, таких как:

export class Logic {
    public static foo() {
        console.log('foo');
    }
}

И тогда в component.ts вы можете просто вызвать Logic.foo (). Однако вы не можете сделать foo private, потому что тогда он недоступен в Component. Кроме того, пока вы переименовываете Logic внутри компонента или где-то еще, т.е.

const LogicalFunctions = Logic;
LogicalFunctions.foo();

Вы не можете ссылаться на них как на часть Компонента, как Component.foo().

1
Mordred 16 Авг 2019 в 15:29

Это зависит от того, чего именно вы хотите достичь.

Вы можете иметь файл logic.ts:

export function foo(){ }

А затем в вашем классе компонентов импортируйте это в приватное статическое свойство, если вы не возражаете против дополнительного шага в вызове ваших функций.

import * as Logic from './Logic'

class Component
{
    private static Logic = Logic; 

    public DoStuff() {
        Component.Logic.foo();
    }
}


Component.Logic.foo(); // Not allowed

Конечно, любой может повторно использовать Logic.ts, но если ваша цель с «private» - ограничить API Component, это может быть идеей.

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

1
Alex 16 Авг 2019 в 16:04