Nat*_*sha 4 typescript typescript-typings typescript-types
是否可以在 TypeScript 中以某种方式定义类型,使其仅包含对象而不包含函数?
例子:
type T = { [name: string]: any } // How to modify this to only accepts objects???
const t: T = () => {} // <- This should not work after modification
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助。
没有完美的方法来引用“一个不是函数的对象”这样的类型,因为这需要真正的减法 types,而这在 TypeScript 中不存在(至少从 3.1 开始)。
一个足够简单的解决方法是查看Function界面并描述一些绝对不是a 的东西Function,但它会与您可能遇到的大多数非函数对象相匹配。例子:
type NotAFunction = { [k: string]: unknown } & ({ bind?: never } | { call?: never });
Run Code Online (Sandbox Code Playgroud)
这意味着“具有一些未指定键的对象,它要么缺少bind属性,要么缺少call属性”。让我们看看它的行为:
const okayObject: NotAFunction = { a: "hey", b: 2, c: true };
const notOkayObject: NotAFunction = () => {}; // error, call is not undefined
Run Code Online (Sandbox Code Playgroud)
好的。
这是一个变通方法而不是一个简单的解决方案的原因是一些非函数可能同时具有 acall和 abind属性,只是巧合,你会得到一个不受欢迎的错误:
const surprisinglyNotOkay: NotAFunction = {
publication: "magazine",
bind: "staples",
call: "867-5309",
fax: null
}; // error, call is not undefined
Run Code Online (Sandbox Code Playgroud)
如果您确实需要支持此类对象,您可以将其更改NotAFunction为更复杂并排除更少的非函数,但可能总会有一些定义出错的地方。你想走多远取决于你。
希望有帮助。祝你好运!
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |