javascript - 如何获取声明为字符串/数字/日期函数的对象字段类型?
问题描述
我想获取具有字符串/日期/数字函数值的对象字段的类型。使用 typeof 运算符时,它返回函数。但我想确切地知道它是哪种类型的功能。有什么办法可以得到吗?
const obj = {
key: String,
key1: Number,
key2: [String]
}
console.log(typeof obj.key) // returns function but i expect it to return string
console.log(typeof obj.key1) // returns function but i expect it to return number
console.log(typeof obj.key2) // returns function but i expect it to return array of string
解决方案
您可以查看该prototype.constructor.name
属性以确定它是 aString
还是Number
.
const obj = {
key: String,
key2: Number,
key3: Date,
}
console.log('key', obj.key.prototype.constructor.name);
console.log('key2', obj.key2.prototype.constructor.name);
console.log('key3', obj.key3.prototype.constructor.name);
console.log(
'is string?',
obj.key.prototype.constructor.name.toLowerCase() === 'string'
);
console.log(
'is number?',
obj.key2.prototype.constructor.name.toLowerCase() === 'number'
);
console.log(
'is date?',
obj.key3.prototype.constructor.name.toLowerCase() === 'date'
);
这会获取对象的构造函数的名称,因此它将与任何命名函数一起使用:
function MyCustomType() {
//
}
const obj = { custom: MyCustomType }
console.log(obj.custom.prototype.constructor.name);
编辑:
const obj = {
key: String,
key1: Number,
key2: [String],
key3: [],
};
function getType(arg) {
var isArray = arg instanceof Array;
if (isArray && arg.length > 0) {
// very naive approach
var typeofFirstItem = arg[0].prototype.constructor.name;
return "Array<" + typeofFirstItem +">";
}
if (isArray) {
return "Array";
}
return arg.prototype.constructor.name;
}
console.log(getType(obj.key))
console.log(getType(obj.key1))
console.log(getType(obj.key2))
console.log(getType(obj.key3))
推荐阅读
- python - 无法在 anaconda 3 (python 3)、linux 中安装 pygame
- python - 如何在当前命令行目录中运行 Python 脚本?
- html - 是否可以使 popover 等于变量或函数?
- javascript - 试图让我的输出显示在正文部分,格式包括页眉、正文(带背景)和页脚
- html - 如何将图像幻灯片放在 div 框中?
- sql - PostgreSQL 慢速运行查询
- python - Why does `pip install` seem to change the interpreter line on some machines?
- javascript - Use custom SCSS with Bootstrap-Vue + Webpack + Vue.js
- excel - Reference a Sheet and Cell for use in Formula
- java - Java 并发实践清单 6.2