【问题标题】:Typescript: Define type as any but function [duplicate]打字稿:将类型定义为除函数之外的任何类型[重复]
【发布时间】:2019-07-14 18:43:32
【问题描述】:

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

我试过这样的交叉路口:

type anyButFunction = any | Function;

但是当我尝试时

const foo: anyButFunction = () => null;

它编译得很好。我怎么能创建这样的类型?这可能吗?

【问题讨论】:

标签: typescript


【解决方案1】:

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

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

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

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

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

}

noFunctions(1) //ok
noFunctions(() => {}) ///error

【讨论】:

  • 还有像 {apply?: never;} 这样的东西,它比“不是函数”更窄(并且可能与特定用例发生冲突),但在不需要泛型的情况下做得不错。
  • @jcalz 啊,是的,我忘记了那个选项,有时我自己也用过,但它会强制使用对象类型,原语将不再起作用。但在工具包 10x 中发布它是一个不错的选择 :)
  • @jcalz 很聪明,但对于从事代码工作的新人来说,这样的定义可能根本不明显。 Exclude&lt;T, Function&gt; 更“直观”,除非您发表评论。
猜你喜欢
  • 2020-12-09
  • 2017-04-13
  • 2021-01-07
  • 1970-01-01
  • 2021-11-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-03
  • 2020-05-11
相关资源
最近更新 更多