Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

return type Object #6

Open
ManAnRuck opened this issue Jul 9, 2020 · 2 comments
Open

return type Object #6

ManAnRuck opened this issue Jul 9, 2020 · 2 comments

Comments

@ManAnRuck
Copy link
Member

Hi @CuddlySheep 🙂
beschäftige mich jetzt auch endlich mal mit dem scraper.
Der läuft auch ganz gut!
Nur ist mir jetzt aufgefallen, dass der Scraper wohl immer den typen Object zurück gibt, der bei der Verwendung mit TypeScript leider nicht viel bringt.
Ist es möglich da ein Interface zu übergeben, was genau zurück kommt?

z.B. ConferenceWeekDetailDataPackage

export interface ConferenceWeekDetailDataPackage {
  meta: Meta;
  data: Data;
}

export interface Data {
  id: string;
  previous: Next;
  this: Next;
  next: Next;
  sessions: Session[];
}

export interface Next {
  year: number | null;
  week: number | null;
}

export interface Session {
  date: Date;
  dateText: string;
  session: string;
  tops: Top[];
}

export interface Top {
  time: Date;
  top: string;
  heading: null | string;
  article: null | string;
  topic: Topic[];
  status: Status[];
}

export interface Status {
  line: string;
  documents: string[];
}

export interface Topic {
  lines: string[];
  documents: string[];
}

export interface Meta {
  url: string;
  currentYear: number;
  currentWeek: number;
}
@jrebmann
Copy link

Hallo @ManAnRuck,

schön von dir zu hören :)
wenn ich dich richtig verstehe, dann willst du ein typisierten callback der scrape Methode haben oder?

public static async scrape<D,M>(scraper: IScraper<D,M>, callback: (data: DataPackage<Object,Object> | null) => Promise<void>) {

Ich habe diese Stelle im code zwar nicht implementiert, aber wenn ich das richtig verstehe, dann könnte man statt Object einfach die Typen des Generics einsetzen:

public static async scrape<D,M>(scraper: IScraper<D,M>, callback: (data: DataPackage<D,M> | null) => Promise<void>) {

D ist ja der Typ der Daten und M der Typ der Metadaten.

Beantwortet das deine Frage oder habe ich sie falsch verstanden? ;)

@ManAnRuck
Copy link
Member Author

Hi @CuddlySheep 😊

Ich hatte schon versucht das an der Stelle zu ersetzen, aber der Scraper selbst (welcher mit einem html stringarbeitet) verwendet (wenn ich das richtig interpretiert habe) den selben Typen.
ich mach das jetzt erstmal so, dass die Rückgabe typisiert wird (im verwendenden code)

const returnValues: ReturnType = scrape(scraper…)
nicht die schönsten aber funktionierende Variante

bei Gelegenheit könnte ich das nochmal versuchen:

public static async scrape<D,M>(scraper: IScraper<string,M>, callback: (data: DataPackage<D,M> | null) => Promise<void>) {

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants