我有一个函数,可以接受任意数量的类。
function findObjects(...Classes) { ... }
所有类都从一个Component
类继承。此功能以某种方式搜索作为这些类的实例的对象。
如何为具有可变参数数量的函数实现模板?
应该是这样的:
function findObjects(...Classes): [...Classes] { ... }
这对于正确定义类型和正确操作智能感知是必需的。
答案 0 :(得分:1)
您可能想看看tuple rest parameters,它用于模拟带有variable number of parameters的函数。可能的解决方案:
Partial<T>
对于返回类型,我使用了undefined
,它是传入类中的mapped tuple with optional elements。如果您的findObjects
实现将相应的类项过滤掉,则它在索引处包含params_constrained = params.copy()
params_constrained['monotone_constraints'] = "(1,-1)"
model_with_constraints = xgb.train(params_constrained, dtrain,
num_boost_round = 1000, evals = evallist,
early_stopping_rounds = 10)
(根据需要调整返回类型)。
答案 1 :(得分:1)
答案 2 :(得分:1)
我的回答遵循您所写的内容:
所有类都从一个Component类继承。此功能以某种方式搜索作为这些类的实例的对象。
因此,在解决方案中,我使用了一些基类Component
并搜索了一些子类成员SubComponent
。
// some empty classes
class Component {}
class SubComponent extends Component {}
function findObjects(...args: Component[]): SubComponent[] {
return args.filter(el => el instanceof SubComponent); // do some by instanceof for example
}
// using
const results = findObjects(new Component(), new Component(), new SubComponent());
// results is an array only with SubComponent element
该函数的定义如下-findObjects(...args: Component[]): SubComponent[]
。
...args: Component[]
-我们将未知数量的Component实例作为参数: SubComponent[]
-我们返回SubComponents
的数组我建议改变一点定义,当我们返回数组时,最好还是采用数组:
function findObjects(arr: Component[]): SubComponent[] {
return arr.filter(el => el instanceof SubComponent); // do some instanceof for example
}
// using
const results = findObjects([new Component(), new Component(), new SubComponent()]);
// results is an array only with SubComponent element
请注意,现在参数为一个-arr
,但它与输出一致,我们将array放入,然后取出array。不过只是一个建议。