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

时间:2019-02-20 22:52:22

标签: typescript typescript-typings

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

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

但收到此错误:

Property 'onBeforeTransition' of type '(() => any) | undefined' is not assignable to string index type '() => any'。 我认识到这在语义上与以下内容具有相同的含义:

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

我想要此功能的原因是为了在定义回调时获得编辑器帮助。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

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

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