TypeScript:我可以声明一个接口可以具有许多其他属性吗?

yan*_*kee 1 typescript

是否可以在TypeScript中表达“此接口的实例具有一个称为'num'的数字,一个名为'func'的函数,并且可能具有任意多个具有未指定名称且为字符串类型的属性”?我想它可能看起来像这样:

interface MyInterface {
  num: number;
  func: Function;
  *: string;
}
Run Code Online (Sandbox Code Playgroud)

您可能想告诉我,这是糟糕的API设计,但是我正在为第3方库编写定义文件,因此我无法更改:-(。

Pal*_*leo 5

最接近的语法如下:

interface MyInterface {
    [index: string]: any;
    num: number;
    func: Function;
}

var a: MyInterface = {
    num: 123,
    func: function () {},
    prop1: 'Hello',
    prop2: 'World'
};
Run Code Online (Sandbox Code Playgroud)

必须使用类型“ any”,因为属性“ num”和“ func”不是字符串:

尽管索引签名是描述数组和“字典”模式的强大方法,但它们也强制所有属性与其返回类型匹配。

资料来源:《TS手册》