【发布时间】:2018-12-04 03:11:51
【问题描述】:
在我的应用程序中,我有几个用于创建 XML 字符串的类。 每个类都有一些方法,它们接受一些参数并返回一个字符串。我想指定此限制,以便无法添加具有不同签名或其他类成员的方法。为此,这是我到目前为止的目标:
interface IRequestParser {
[funcName: string]: (...args: any[]) => string;
}
还有一个类的例子:
class myParser implements IRequestParser {
[funcName: string]: (...args: any[]) => string;
func1(a) {
return '';
}
}
这会阻止我添加不返回字符串或任何其他非方法成员的函数,因此这些在 myParser 中是不允许的:
a: string; // not allowed
b() { // not allowed
return 5;
}
但是,这样可以让我从 myParser 的实例中调用任何函数名称而不会发出警报:
const a = new myParser();
console.log(a.func1('a'));
console.log(a.func2(4, 5, ['s', 'b']));
对func1 的调用是有意义的,如果我没有为其参数a 提供值,我也会收到错误消息。但是,我也可以调用不存在的函数func2 和任何其他名称。
有没有办法既限制类成员的类型,又避免调用任何名称的任何函数的情况?
【问题讨论】:
标签: javascript typescript