TypeScript中的object出现的错误
object是个很基础也很常见的引用类型,比如我用typescript定义一个object类型的变量
1  | let a: object;  | 
乍一看没什么问题,但却_暗藏玄机_
比如我现在想定义一个函数,它能判断对象哪些属性是number类型,然后返回一个由这些属性组成的新的对象:
1  | const isNumber = (object: object) => {  | 
这样看上去没什么问题,但是编译器会报错:

上面提示不能用key作为{}类型的索引,但result为什么是{}类型呢?它为什么是个空对象呢?
这就是object类型的弊端,它覆盖的范围太广,几乎除了原始类型外的所有类型都是由它而衍生的,原型链的终点都有它
看下面一段代码就明白了:
1  | let a: object;  | 
在这三种情况下,ts都没有报错
于是上面的问题就找到原因了,_js引擎_并不知道这个result具体是个字面量对象,还是函数或者说是索引类型,所以它非常人性化的给你返回了{},而key当作{}的索引就报错了。
解决办法
方案1
通过 keyof 的方式可以获取ts 类型的属性key的值
适用与非函数场景
1  | var foo = {  | 
方案2
将参数类型改为_key-value_对象
1  | 
  |