【发布时间】:2019-03-12 13:18:18
【问题描述】:
是否可以在 TypeScript 中以某种方式定义一个类型,使其只包含对象而不包含函数?
例子:
type T = { [name: string]: any } // How to modify this to only accepts objects???
const t: T = () => {} // <- This should not work after modification
感谢您的帮助。
【问题讨论】:
-
我完全理解你的问题,但在这里只是为了扮演魔鬼的拥护者,如果有人传入一个函数,如果它包含你期望它具有的所有属性会有什么问题?
-
这是关于重载具有 arity 1 的函数:对象参数的第一个签名,函数参数的第二个签名。在我的代码中,编译器总是采用第一个签名(对于对象和函数),这导致了非预期的类型推断。在我的特殊情况下,解决方案是更改签名声明的顺序。希望我的意思很清楚。意味着:我的问题已经解决了,但是我仍然对上述问题的答案感兴趣......顺便说一句:Exclude
之类的东西似乎也不起作用...... -
这是有道理的。据我所知,它需要运行时检查来区分函数和普通对象,因为在 JavaScript 中,函数 is 是一个对象。我相信
Exclude不起作用,因为在执行它不扩展Function的断言之前,赋值将函数的类型扩大到T。
标签: typescript typescript-typings typescript-types