For instance it would be nice if instead of this:
const bla = @import("bla.zig");
const a = bla.a;
const b = bla.b;
const c = bla.c;
...I could write this: const { a, b, c } = @import("bla.zig");
...which would be normal destructuring (since the result of a Zig import is a struct).And in reverse it would be nice if there would be some equivalent to the spread operator:
const a = Bla{ .x = 1, .y = 2, .z = 3 };
const b = Bla{ ...a, .z = 4 };
...this would be the same as `b = Bla{ .x = a.x, .y = a.y, .z = 4 }`...same for working with arrays and slices (there is a form of destructuring specifically for tuples, but IMHO that's a too narrow use case for a much too useful feature).
I'm not actually a fan of porting Typescript's advanced type system features over to Zig, a lot of those features would require the use of tagged unions (aka sum types) for pretty much everything, which IMHO just doesn't feel right for a low level systems programming language (since the tagged union always carries around the 'weight' of it's biggest type).
...also thinking about it, some Typescript features for building new types from existing types can probably be emulated with Zig's comptime features.