Variant Data Type for AssemblyScript
Supports any builtin types like i32, bool, string and any custom classes (managed and unmanaged).
Basic Usage
import { Variant } from 'as-variant/assembly'
class Foo { }
let vNum = Variant.from(123)
let vStr = Variant.from('hello')
let vFoo = Variant.from(new Foo)
vNum.set(2.0)
assert(vNum.is<f64>())
assert(!vStr.is<f64>())
assert(vStr.is<string>())
assert(vFoo.is<Foo>())
assert(vNum.id != vStr.id)
assert(vFoo.id == Variant.idof<Foo>())
let valF64 = vNum.get<f64>()
let willFail = vNum.get<string>()
Unsafe Usage:
let vNum = Variant.from(123)
assert(vNum.getUnchecked<i32>() == 123)
Use as value for Any Dynamic Dictionary
const dict = new Map<string, Variant>()
dict.set('str', Variant.from('hello'))
dict.set('num', Variant.from(124.0))
dict.set('arr', Variant.from([1, 2, 3]))
assert(dict.get('arr').get<i32[]>()[2] == 3)
assert(dict['arr'].get<i32[]>()[2] == 3)
which equivalent to JavaScript:
const dict = {
str: 'hello',
num: 124.0,
}
dict.arr = [1, 2, 3]
assert(dict.arr[2] == 3)