出现这个问题的主要原因就是没有定义对象类型,解决方法也很简单定义一下对象类型就可以了。

首先可以定义 interface 类型。

interface ComponentConfig {
  id: string;
  type?: string;
  attributes?: object;
  component?: string;
  items: object[];
  listeners?: object[]
  dataSet?: object[];
}
interface ConfigType {
  [key: string]: PageConfig;
}
import { useRoute } from 'vue-router'
import config from '@/config'
 
const route = useRoute()
const configTyped: ConfigType = config;
const pageConfig = configTyped[route.name as string] as ComponentConfig;
if (!pageConfig) {
  throw new Error('页面配置不存在')
}

如果单独定义 interface 太麻烦,也可以直接定义。

obj: {[key: string]: any[]}

也可以使用更简单的语法糖 Record

Record<string, any[]>

定义类型断言。

type EventType = 'click' | 'submit'

强制转换类型为 string。

const key = Object.keys(obj).find((key: string) => Array.isArray(obj[key])) as string