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;
}
}