将索引签名添加到typescript中定义的函数的建议方法是什么?

时间:2017-04-09 09:38:28

标签: typescript typescript2.0

我们假设我有一个函数el,在typescript中定义:

function el():string { .. }

我想在以后添加密钥到el:

时删除类型违规(没有索引签名)
el.x = () => {...}

这是否可以不进行任何投射?

到目前为止,我找到的最佳解决方案是定义一个单独的接口并在分配时投射到它:

interface ElFactory {
  [index: string]: () => string
  (): string
}

然后:

(el as ElFactory).x = () => {}

是否可以完全避免铸造?如同,在定义函数时将其与接口关联或在定义函数时指定索引签名?

1 个答案:

答案 0 :(得分:1)

您可以在创建界面时将其转换为界面:

interface ElFactory {
  [index: string]: () => string
  (): string
}

var el = function (): string {
    return "test";
} as ElFactory;

el.test1 = () => "22"; // works
el.test2 = "22"; // error

在TypeScript 2.2之前,您必须使用括号表示法来定义要使其工作的属性:

el["test1"] = () => "22"; // works
el["test2"] = "22"; // error