Is it possible to create an abstract class called ParseContent
that allows implementors to define a parse
method, while also having additional methods that return instances of the implementing class?
export abstract class ParseContent extends RawContent {
parsed: any
constructor(params: ConstructorParameters<typeof RawContent>[0] & {
parsed: any
}) {
super(params)
this.parsed = params.parsed
}
abstract parse<T> (content: string): T
static fromString(opt: Parameters<typeof RawContent['fromString']>[0]) {
const pureOpts = super.fromStringOpts(opt)
const parsed = this.parse(pureOpts.content)
return new this({ ...pureOpts, parsed })
}
static async fromPath(opt: Parameters<typeof RawContent['fromPath']>[0]) {
const pureOpts = await super.fromPathOpts(opt)
const parsed = this.parse(pureOpts.content)
return new this({ ...pureOpts, parsed })
}
}
export class JSONContent extends ParseContent {
static parse(content: string): any {
return JSON.parse(content)
}
}