Typescript 创建接受对象但不接受数组的泛型函数

Typescript 创建接受对象但不接受数组的泛型函数,typescript,typescript-typings,typescript-generics,Typescript,Typescript Typings,Typescript Generics,我想创建一个通用的TypeScript函数来满足以下条件: f({ a: 1 }); // success f(undefined); // success f([]); // should fail the type check f([1, 2]); // should fail the type check 换句话说,函数不应该允许数组作为参数传递,而应该接受对象 问题是,数组是JavaScript中的一个对象。即使是这样: const x: Record<string, any&g

我想创建一个通用的TypeScript函数来满足以下条件:

f({ a: 1 }); // success
f(undefined); // success
f([]); // should fail the type check
f([1, 2]); // should fail the type check
换句话说,函数不应该允许数组作为参数传递,而应该接受对象

问题是,数组是JavaScript中的一个对象。即使是这样:

const x: Record<string, any> = ['test']; // works!
const x:Record=['test'];//作品
因此,我不知道如何以通用的方式键入参数或返回类型,以便它接受任何对象(也返回它),但不接受数组。我想使用类型,而不是在运行时使用数组。isArray

尝试使用类似的:

类型NotArray=T扩展数组?从不:T;
函数f(参数:NotArray){
}
对于任何数组类型参数都将失败

type NotArray<T> = T extends Array<unknown> ? never : T;

function f<T>(arg: NotArray<T>) {

}