Подтвердить что ты не робот

Как структурировать класс утилиты

У меня есть несколько функций полезности. Каков наилучший способ их упаковки, а затем импортировать?

Это то, что я пытаюсь сделать:

import * as util from './util'

export class myClass{
     constructor()
     {
           util.doSomething("test");
     }
}

Тогда в классе:

export class Util{
    doSomething(val: string){ return val;}

    doSomethingElse(val: string{ return val;}
}

Сообщение об ошибке, которое я получаю от VS, это "Свойство doSomething не существует в типе util."

4b9b3361

Ответ 1

Если вы создаете файл utils.ts, который содержит

export default class Utils {
    static doSomething(val: string) { return val; }
    static doSomethingElse(val: string) { return val; }
}

то вы можете упростить свой код клиента следующим образом:

import Utils from './utils'

export class MyClass {
     constructor()
     {
         Utils.doSomething("test");
     }
}

Ответ 2

Здесь пара проблем:

  • Вы ничего не создаете, а doSomething - это метод экземпляра
  • Когда вы выполняете import * as util, util представляет модуль, а не объект в нем.

Если вы хотите util, вы должны просто импортировать это:

import { Util } from './util'

Затем вы должны создать экземпляр util, прежде чем, наконец, назовите метод на нем:

var u = new Util();
u.doSomething("test");

Здесь ваш код исправлен:

import { Util } from './util'

export class MyClass{
     constructor()
     {
         var u = new Util();
         u.doSomething("test");
     }
}

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

Кроме того, методы в util действительно не выглядят так, как будто они должны быть в этом классе, поскольку класс не содержит состояния, от которого они зависят. Вы всегда можете экспортировать регулярные функции из модуля. Если вы написали свой модуль utils следующим образом:

export function doSomething(val: string) { return val; }

export function doSomethingElse(val: string) { return val; }

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

Ответ 3

Или вы можете экспортировать это как объектный литерал:

export const Util = {
    doSomething(val: string){ return val;},
    doSomethingElse(val: string{ return val;}
}

Ответ 4

Вы также можете создать класс util.ts, который имеет функцию для экспорта

export const formatDateOfBirth = 
(dob: string) : string => '${dob.substring(0, 4)}-${dob.substring(4, 6)}-${dob.substring(6, 8)}';

Теперь вы можете импортировать метод, как показано ниже, структура общих папок src> app> shared, я вызываю этот импорт в файле src> app> shelf> shelf.component.ts

import { formatDateOfBirth } from '../shared/utils/util';
public getFormattedDate(dob: string):string{
  return formatDateOfBirth(dob);
}

Ответ 5

Альтернативный способ:
1) Экспортируйте константы в ваш файл utils.ts:

export const doSomething = (val: string): any => {
  return val;
};

export const doSomethingElse = (val: string): any => {
  return val;
};

2) Импортируйте и используйте эти методы в основном файле *.ts:

import { doSomething, doSomethingElse } from './util';
...
let value1 = doSomething('abc');
let value2 = doSomethingElse ('efg');