I'm working with a TypeScript library that generates TypeScript code, called ts-proto
This generated code looks like this:
//BasicMessage.ts
export interface BasicMessage {
id: Long;
name: string;
}
export const BasicMessage = {
encode(message: BasicMessage) : Writer {
...
}
fromJSON(object: any): BasicMessage {
...
}
}
and
// BasicMessagePlus.ts
export interface BasicMessagePlus {
id: Long;
name: string;
email: string;
}
export const BasicMessagePlus = {
encode(message: BasicMessagePlus) : Writer {
...
}
fromJSON(object: any): BasicMessagePlus {
...
}
}
Since this code is generated, I can't change it. What I need to do is create a method that takes a type name and an object and encodes it, something like this:
function encode(typeName: string, object: any): Writer {
import(`/path/to/${typeName}`);
return <typeName>.encode(<typeName>.fromJSON(object));
}
let writer1 = encode("BasicMessage", { id: 1, name: "Fake" });
let writer2 = encode("BasicMessagePlus", { id: 1, name: "Fake", email: "fake@fake.com" });
I've tried all type of tricks using eval and globalThis, but I just can't find a combination that lets me do what I'm trying to do. Thanks for your help!