Ich habe mehrere Dienstprogrammfunktionen. Was ist der beste Weg, um diese zu verpacken und dann zu importieren?
Das versuche ich zu tun:
import * as util from './util'
export class myClass{
constructor()
{
util.doSomething("test");
}
}
Dann in der Klasse:
export class Util{
doSomething(val: string){ return val;}
doSomethingElse(val: string{ return val;}
}
Die Fehlermeldung, die ich von VS erhalte, lautet:
Property doSomething does not exist on type util.
typescript
typescript1.6
Greg Gum
quelle
quelle
class Utils
ist eine schlechte Idee, vollständig zustandslose Funktionen als statische Mitglieder von a zu verpacken , wie in dieser Antwort gezeigt . Die Moduloptimierung wird ohne jeglichen Nutzen für Sie unterbrochen. Wenn Ihre Mitglieder wiedoSomething
unddoSomethingElse
völlig staatenlos sind und nicht auf private Mitglieder einer Klasse verweisen, sollten sie überhaupt nicht in einer Klasse sein. Sie sollten sie direkt mit exportierenexport function doSomething ...
.Hier gibt es ein paar Probleme:
doSomething
sind eine Instanzmethodeimport * as util
, wirdutil
das Modul dargestellt, kein Objekt darin.Wenn Sie möchten
Util
, sollten Sie einfach Folgendes importieren:import { Util } from './util'
Als nächstes sollten Sie instanziieren
Util
, bevor Sie die Methode darauf aufrufen:var u = new Util(); u.doSomething("test");
Hier ist Ihr Code gepatcht:
import { Util } from './util' export class MyClass{ constructor() { var u = new Util(); u.doSomething("test"); } }
Alles in allem scheint die Art und Weise, wie Sie Ihre Utensilien verwenden, etwas Seltsames zu sein. Dies ist eine ganz persönliche Meinung, aber ich würde keine Methoden aufrufen, die in einem Konstruktor "etwas tun", dh Nebenwirkungen verursachen.
Außerdem sehen die Methoden in
Util
nicht wirklich so aus, als müssten sie in dieser Klasse sein, da die Klasse keinen Status hat, von dem sie abhängen. Sie können jederzeit reguläre Funktionen aus einem Modul exportieren. Wenn Sie Ihr Utils-Modul folgendermaßen geschrieben haben:export function doSomething(val: string) { return val; } export function doSomethingElse(val: string) { return val; }
Sie würden Ihre Funktionen direkt exportieren und den Instanziierungsaufwand umgehen, und tatsächlich würde Ihr ursprünglicher Code so wie er ist korrekt funktionieren.
quelle
export function...
das habe ich versucht.new
Schlüsselwort instanziiert werden . Wenn Sie Standardkonventionen befolgen und die Erstellung von Ausführungskontexten reduzieren möchten, sollten die Util-Klassenmethoden statische Methoden sein, auf die überUtil.doSomething()
class Util
überhaupt tun . Da die Mitglieder staatenlos sind (was ich in meiner Antwort und an dieser Stelle in zwei verschiedenen Kommentaren erwähnt habe), sollten Sie überhaupt keine Klasse haben . Sie sollten die Mitglieder direkt exportieren, um das Baumschütteln auszunutzen.Alternativer Weg:
Exportieren Sie Konstanten in Ihre
utils.ts
Datei:export const doSomething = (val: string): any => { return val; }; export const doSomethingElse = (val: string): any => { return val; };
Importieren und verwenden Sie diese Methoden in der Hauptdatei
*.ts
:import { doSomething, doSomethingElse } from './util'; ... let value1 = doSomething('abc'); let value2 = doSomethingElse ('efg');
quelle
import * as Util from './util';
und benutze Funktionen alsUtil.doSomething('abc');
.Oder Sie könnten exportieren ist als Objektliteral:
export const Util = { doSomething(val: string){ return val;}, doSomethingElse(val: string{ return val;} }
quelle
const
oben in der Datei erstellen und dannexport const Util { doSomething, doSomethingElse }
Sie können auch eine
util.ts
Klasse erstellen , die eine zu exportierende Funktion hatexport const formatDateOfBirth = (dob: string) : string => `${dob.substring(0, 4)}-${dob.substring(4, 6)}-${dob.substring(6, 8)}`;
Jetzt können Sie die Methode importieren , wie unten, gemeinsame Ordnerstruktur ist
src
>app
>shared
, ich rufe diesen Import innensrc
>app
>shelf
>shelf.component.ts
Dateiimport { formatDateOfBirth } from '../shared/utils/util'; public getFormattedDate(dob: string):string{ return formatDateOfBirth(dob); }
quelle