Discriminar el tipo de segmento de Node.js Buffer en TypeScript
He definido estas interfaces en typescript:
enum TypeId {
A = 0,
B = 1,
C = 2
}
interface A {
id: TypeId.A
}
interface B {
id: TypeId.B,
foo: string
}
interface C {
id: TypeId.C
}
type MyType = A | B | C
Ahora quiero deserializar estos tipos desde una instancia de Buffer
. Leo un byte para obtener el ID y si coincide con TypeId.B
, se deben leer 4 bytes para el valor de foo
.
¿Cómo puedo hacer esto en una función con la firma parse(buffer: Buffer): MyType
?
Gracias por cualquier ayuda.
davy.ai
Aquí hay una posible implementación para la función
parse
:Esta función lee el primer byte del buffer para determinar la ID del objeto a deserializar. Dependiendo de la ID, crea un objeto de la interfaz correspondiente, leyendo opcionalmente bytes adicionales del buffer.
Para
TypeId.B
, leemos 4 bytes con el métodoreadUInt32LE
, que devuelve un entero sin signo en formato little-endian. Convertimos este valor a una cadena con el métodotoString
y lo asignamos a la propiedadfoo
del objeto devuelto.Si la ID no es reconocida, lanzamos un error. Ten en cuenta que esta implementación asume que el buffer contiene al menos un byte y que está bien formado (es decir, contiene una ID válida y el número correcto de bytes adicionales para
TypeId.B
).