首页 前端知识 TypeScript(、JavaScript)无法通过typeof Object[‘key‘]的方式获取Object某些属性类型的原因

TypeScript(、JavaScript)无法通过typeof Object[‘key‘]的方式获取Object某些属性类型的原因

2025-03-15 13:03:33 前端知识 前端哥 250 554 我要收藏

    今天在学习ts的时候看到了这么一个表达式:

const arr:[string|number] = [1,'hello']
console.log(typeof arr['length'])

//输出结果为 2

    于是我就突发奇想,既然可以用索引签名获取属性的类型,那我理论上也可以通过这种方式获取这个arr数组原型链上的所有属性类型,比如Array的sort方法:

const arr:[string|number] = [1,'hello']
console.log(typeof arr['sort'])

//输出结果为 function

     既然数组可以,那么同为引用类型的对象是否也可以?于是我创建了一个新对象user,读取user对象中的defineProperty方法类型,如果正确输出的话,终端显示的应该是function,结果却是这样的:

interface IUser {
  name:string
}
const user:IUser = {
  name:'xiaozheng'
}

// 输出user对象中的defineProperty方法
console.log(typeof user['defineProperty'])

//输出结果为 undefined

       出乎我意料,user对象中的defineProperty方法类型未定义。这时候依靠大佬协助我才明白:

       Object本身是一个基类,Object其中的绝大部分方法和属性都是静态的,只有Object派生出的类和Object本身才可访问这些静态属性和方法,也就是说这些属性和方法无法被外界访问和使用,里面就包括defineProperty。所以如果直接用Object类对象访问defineProperty方法类型,就会有正确的返回值:

console.log(typeof Object['defineProperty'])

//输出结果为 function

       

转载请注明出处或者链接地址:https://www.qianduange.cn//article/23725.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!