function getTypeOfValue()

in lib/index.ts [223:260]


function getTypeOfValue(value: any): dom.Type {
    for (const k in builtins) {
        if (builtins[k] && value instanceof builtins[k]!) {
            return create.namedTypeReference(k);
        }
    }

    if (Array.isArray(value)) {
        if (value.length > 0) {
            return create.array(getTypeOfValue(value[0]));
        } else {
            return create.array(dom.type.any);
        }
    }

    const type = typeof value;
    switch (type) {
        case 'string':
        case 'number':
        case 'boolean':
            return type;
        case 'undefined':
            return dom.type.any;
        case 'object':
            if (value === null) {
                return dom.type.any;
            } else {
                walkStack.add(value);
                const members = getPropertyDeclarationsOfObject(value);
                walkStack.delete(value);
                members.sort(declarationComparer);
                const objType = dom.create.objectType(members);
                return objType;
            }
        default:
            return dom.type.any;
    }
}