Typescript:将类型定义为除函数以外的任何类型

Typescript:将类型定义为除函数以外的任何类型,typescript,Typescript,我想定义一个类型,它允许除函数之外的任何类型,我如何实现它 我试过这样一个十字路口: type anyButFunction = any | Function; 但是当我尝试的时候 const foo: anyButFunction = () => null; 它确实很好。我怎样才能创建这样的类型?这可能吗?这目前是不可能的,当否定类型可用时,它将成为可能。此处描述了这个确切的用例: 这可以用来限制无界类型的潜在类型吗?例如,number¬ 0允许除文本0之外的任何数字 是的。这

我想定义一个类型,它允许除函数之外的任何类型,我如何实现它

我试过这样一个十字路口:

type anyButFunction = any | Function;
但是当我尝试的时候

const foo: anyButFunction = () => null;

它确实很好。我怎样才能创建这样的类型?这可能吗?

这目前是不可能的,当否定类型可用时,它将成为可能。此处描述了这个确切的用例:

这可以用来限制无界类型的潜在类型吗?例如,
number¬ 0
允许除文本0之外的任何数字

是的。这是他们的主要动力

如果您希望将参数限制为函数,我们目前可以使用泛型和条件类型来实现这一点,这将主要用作否定类型:

function noFunctions<T>(p: Exclude<T, Function>) {

}

noFunctions(1) //ok
noFunctions(() => {}) ///error
函数noFunctions(p:排除){
}
noFunctions(1)//正常
noFunctions(()=>{})///错误

任何|函数并不意味着“
任何
函数
”?也与之相关还有类似于
{apply?:never;}
的东西,它比“非函数”更窄(可能与特定用例冲突)但是它在不需要泛型的情况下做得很好。@jcalz啊,是的,我忘记了这个选项,有时我自己也用过,但它会强制使用对象类型,原语将不再工作。但是,在toolkit 10x中发布它是一个很好的选择:)@jcalz-cleer,但是对于一个新的代码开发人员来说,这样的定义可能一点也不明显<除非您留下注释,否则code>Exclude更“直观”。@kirilloid您可以给它一个文档名称,如
NotFunction={apply?:never;}
,但它不是非常明显。