我们假设我有一个函数el,在typescript中定义:
function el():string { .. }
我想在以后添加密钥到el:
时删除类型违规(没有索引签名)el.x = () => {...}
这是否可以不进行任何投射?
到目前为止,我找到的最佳解决方案是定义一个单独的接口并在分配时投射到它:
interface ElFactory {
[index: string]: () => string
(): string
}
然后:
(el as ElFactory).x = () => {}
是否可以完全避免铸造?如同,在定义函数时将其与接口关联或在定义函数时指定索引签名?
答案 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