typescript - Hvordan strukturere hjelpeklasse
Jeg har flere hjelpefunksjoner. Hva er den beste måten å pakke dem sammen på, og deretter importere dem?
Dette er hva jeg prøver å gjøre:
import * as util from './util'
export class myClass{
constructor()
{
util.doSomething("test");
}
}
Så i timen:
export class Util{
doSomething(val: string){ return val;}
doSomethingElse(val: string){ return val;}
}
Feilmeldingen jeg får fra VS er:
Property doSomething does not exist on type util.
Svar #1
Hvis du oppretter en fil utils.ts som inneholder
export default class Utils {
static doSomething(val: string) { return val; }
static doSomethingElse(val: string) { return val; }
}
da kan du forenkle klientkoden din slik:
import Utils from './utils'
export class MyClass {
constructor()
{
Utils.doSomething("test");
}
}
Svar #2
Det er et par problemer her:
- Du oppretter ikke noe, og
doSomethinger en instansmetode - Når du gjør
import * as util, representererutilmodulen, ikke et objekt i den.
Hvis du vil ha Util, bør du bare importere det:
import { Util } from './util'
Deretter bør du instantiere Util, før du til slutt kaller metoden på det:
var u = new Util();
u.doSomething("test");
Her er koden din reparert:
import { Util } from './util'
export class MyClass{
constructor()
{
var u = new Util();
u.doSomething("test");
}
}
Alt det sagt, ser det ut til å være noe merkelig med måten du bruker verktøyene dine på. Dette er helt personlig mening, men jeg ville ikke påkalle metoder som "gjør noe", altså forårsaker bivirkninger, i en konstruktør.
Også ser ikke metodene i Util egentlig ut til å trenge å være i den klassen, siden klassen ikke har noen tilstand som de er avhengige av. Du kan alltid eksportere vanlige funksjoner fra en modul. Hvis du skrev utils-modulen din slik:
export function doSomething(val: string) { return val; }
export function doSomethingElse(val: string) { return val; }
du ville eksportere funksjonene dine direkte og ville unngå problemer med instansiering, og faktisk ville den opprinnelige koden din fungere korrekt som den er.
Svar #3
Alternativ måte:
Eksporter konstanter i din
utils.ts-fil:export const doSomething = (val: string): any => { return val; }; export const doSomethingElse = (val: string): any => { return val; };Importer og bruk disse metodene i hoved-
*.ts-filen:import { doSomething, doSomethingElse } from './util'; ... let value1 = doSomething('abc'); let value2 = doSomethingElse ('efg');
