Typescript中的 对象 是最容易混淆的一个概念,也是最难约束的!
Function类型 也是一个 object类型,Array类型也是一个 object类型!为此要约束一个【非数组函数类型的对象类型】参考:
// 定义一个【非数组和函数的对象类型】
export type OnlyObjectType<T> = T extends Function | Array<any> ? never : (T extends object ? T : never)
function f<T>(o: OnlyObjectType<T>) {
console.log(o)
}
// 对象约束
f({ name: "1232" }) // 正确
// 数组约束
f([]) // 错误
// 函数约束
f(()=>{}) // 错误