在TypeScript中,是否有可能定义一个类型,使其只包含对象而不包含函数?
示例:
type T = { [name: string]: any } // How to modify this to only accepts objects???
const t: T = () => {} // <- This should not work after modification
谢谢你的帮助。
在TypeScript中,是否有可能定义一个类型,使其只包含对象而不包含函数?
示例:
type T = { [name: string]: any } // How to modify this to only accepts objects???
const t: T = () => {} // <- This should not work after modification
谢谢你的帮助。
1条答案
按热度按时间3pvhb19x1#
没有完美的方法来引用像“一个不是函数的对象”这样的类型,因为这需要真正的subtraction types,而这在TypeScript中不存在(至少在3.1中)。
一个简单的解决方法是查看
Function
接口,并描述一些绝对不是Function
的东西,但它可以匹配您可能遇到的大多数非函数对象。示例:这意味着“一个带有一些未指定键的对象,它要么缺少
bind
属性,要么缺少call
属性”。让我们看看它是如何工作的:很好。
这是一种变通方法,而不是一种直接的解决方案,原因是一些非函数可能同时具有
call
和bind
属性,这只是巧合,你会得到一个不希望的错误:如果你真的需要支持这样的对象,你可以将
NotAFunction
修改得更复杂,并排除更少的非函数,但定义可能总是会出错。这取决于你how far you want to go。