提问人:VoidfullBrain 提问时间:2/3/2023 最后编辑:Henry EckerVoidfullBrain 更新时间:2/5/2023 访问量:87
如何在不使用“any”的情况下实现以下示例
How can I implement the following example without using "any"
问:
我有一些类,让我们称它们为:ExampleClassOne
ExampleCLassTwo
abstract class AbstractExampleClass {
protected member: SomeClass;
constructor(member: SomeClass) {
this.member = member;
}
}
class ExampleClassOne extends AbstractExampleClass {
public methodOne() {
// Do something
}
public methodTwo() {
// Do something different
}
}
class ExampleClassTwo extends AbstractExampleClass {
public methodThree() {
// Do something
}
public methodFour() {
// Do something different
}
}
我有一个配置,如下所示:
const config = {
classes:
[
{
className: ExampleClassOne
methods:
[
{
method: 'methodOne',
},
{
method: 'methodeTwo',
},
]
},
{
className: ExampleClassTwo
methods:
[
{
method: 'methodThree',
},
{
method: 'methodeThree',
},
]
},
]
}
现在,我使用方法数组的内部迭代遍历配置数组,如下所示:
for(let i = 0; i < config.length; i++) {
const configClass = config.classes[i];
for(let j = 0; j < configClass.methods.length) {
initializeObjectAndCallMethod(configClass.name, configClass.methods[j].method);
}
};
initializeObjectAndCallMethod
看起来像这样:
initializeObjectAndCallMethod(className: {new (member: SomeClass): any}, methodName: string): void {
const memberObject = new SomeClass();
const object = new className(memberObject );
const method = methodName as keyof typeof object;
if(object.hasOwnProperty(method)) {
object[method]();
}
}
如果我在函数声明中使用这样的任何 - - 一切正常。initializeObjectAndCallMethod(class: {new (member: SomeClass): any}, methodName: string)
一种不使用任何方法的方法是将任何交换与以下内容交换:.但这会引发错误:此表达式不可调用。类型“never”没有呼叫签名。因为,正如@geoffrey所指出的,没有公共成员,并且 linter 对我从配置中传递的类一无所知。AbstractExampleClass
initializeObjectAndCallMethod(className: {new (member: SomeClass): AbstractExampleClass}, methodName: string): void
AbstractExampleClass
这就是我的问题所在:有没有可能不在那里使用“任何”或其他方式来实现我在那里所做的事情?
答: 暂无答案
评论
AbstractExampleClass
没有任何成员,所以是。keyof AbstractExampleClass
never
class
AbstractExampleClass