ค้นหาเว็บไซต์

javascript - แปลงวัตถุ JSON กลับเป็นคลาสต้นฉบับของมัน


ฉันกำลังพยายามที่จะทำการเรียงลำดับ/เรียกคืนอ็อบเจ็กต์ ฉันคิดว่าวิธีที่ดีที่สุดน่าจะเป็นการบันทึกเส้นทางไปยังไฟล์ที่เรียกใช้งานเป็นส่วนหนึ่งของ json แต่ฉันไม่แน่ใจว่าจะหาการเส้นทางดังกล่าวได้อย่างไร

การที่จะได้เส้นทางไปยังไฟล์นี้ (A.ts/B.ts) สามารถทำได้เมื่อเรียกใช้ภายในไฟล์แม่ (Base.ts) หรือไม่?

อาจจะมีวิธีที่ดีกว่าในการทำสิ่งนี้ไหม? ฉันกำลังพยายามนำคลาสที่สร้างขึ้นในกระบวนการโหนดหลัก และส่งต่อไปยังกระบวนการเวิร์กเกอร์ วิธีเดียวที่ฉันเห็นคือการทำให้คลาสสามารถเรียกใช้การเซเรียลไลซ์/ดีเซเรียลไลซ์ได้ somehow

// src/Base.ts
export abstract class Base {

  public serialize() {
    return JSON.stringify({path: '', obj: this})
  }

  public static deserialize(json: string) {
    let { path, obj } = JSON.parse(json) as { path: string, obj: { [key: string]: any } }

    let newable = require(path)
    let o = new newable
    return Object.assign(o, obj)
  }

}

// src/filter/A.ts
export class A extends Base {
  public cat: string = 'meow'
  public sayHi() { return this.cat }
}

// src/filter/B.ts
export class B extends Base {
  public dog: string = 'woof'
  public sayHi() { return this.dog }
}

// test.ts
let serializedA = new A().serialize()
let serializedB = new B().serialize()
// Create child...
let worker = cp.fork(path.join(__dirname, './worker'), [], { silent: true })
worker.send({ serializedA, serializedB })

// worker.ts
process.on('message', msg => {
  let classA = Base.deserialize(msg.serializedA)
  let classB = Base.deserialize(msg.serializedB)
})