First you have to decide whether AssemblyScript is a language, or a compiler for an existing language.
If it's a language, then it gets to decide what ```let foo: string = "whatever"``` means.
If it's a compiler for an existing language, then semantics have already been decided, and the compiler has to implement it.
But none of the precludes abstraction to reduce data type conversions.