具有一些已知但可选的属性名称和一些未知属性名称的对象的 Typescript 接口(interface)

标签 typescript typescript-typings

我想为一个对象创建一个接口(interface),该对象具有具有特定名称的可选属性,但也接受任意命名的属性。这是我尝试过的。

interface CallBack {
  onTransition?(): any; // can have this
  [key: string]: () => any; // or this. But not both
}

但是收到这个错误:

'(() => any) 类型的属性'onBeforeTransition' | undefined' 不可分配给字符串索引类型 '() => any'。 我认识到这在语义上与以下含义相同:

interface CallBack {
  [key: string]: () => any;
}

我想要此功能的原因是为了让编辑器在定义回调时提供帮助。有什么办法可以实现吗?

最佳答案

你可以让索引签名的返回类型返回 (() => any) |未定义。无论如何,这可能是个好主意,因为对该对象的任何字符串访问都可能返回一个函数或未定义的,无论如何都应该检查。

interface CallBack {
    onTransition?(): any; 
    [key: string]: (() => any) | undefined;
}

关于具有一些已知但可选的属性名称和一些未知属性名称的对象的 Typescript 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54796530/

相关文章:

javascript - typescript 中服务的动态函数调用

javascript - 如何在客户端 JavaScript 中使用 TypeScript?

typescript - 问题 : TypeScript not finding the declaration file

reactjs - typescript 和 react : Pass component in props and return it from a function

typescript - 如何扩展类型声明?

javascript - Angular 2 动态表单 - 实现清晰的功能

javascript - 如何在运行时在 nestjs 中扫描所有装饰器值

typescript - 从 typescript 类型定义文件导出枚举

javascript - Angular2 导入语法 : "import * as <foo>" vs "import {<foo>}"

arrays - TypeScript:输入带有值或空的数组/元组