我正在尝试在Angular项目中扩展一个类,我想使用ES2015的rest / spread语法将参数传递给父类,就像this question
的答案一样var text='{"value": "I said, \\"hello\\""}';
但我收到错误constructor(...args) {
super(...args);
}
,我的应用无法编译。
我做了a contrived example using the typescript playground。有没有人知道如何让它工作而不必显式写出父类方法的参数?
更新:正如Teddy Sterne所指出的,我实际上不需要将它用于构造函数,因为它具有相同的参数。我实际上想用这个方法返回一个observable。我想通过覆盖方法并返回super.parentMethod(... args).catch(/ *处理错误* /)来捕获错误
答案 0 :(得分:1)
此问题在本期问题中得到了回答:https://github.com/Microsoft/TypeScript/issues/11679
你是正确的假设是因为类型检查。让我们假设父构造函数需要固定数量的参数。在声明super(...args)
点时,编译器不知道传递的参数的实际数量。因此它将其标记为不安全。
答案 1 :(得分:0)
如果Child
与Parent
的构造函数具有完全相同的参数,则无需指定构造函数。将注入父项所需的依赖项,并且将隐式调用父项的构造函数。
class ParentClass {
constructor(dep1: Dep1, dep2: Dep2) { }
}
class ChildClass {
}
如果孩子有其他依赖关系,那么你必须重新指定它们,然后将它们传递给Child的构造函数中的Parent的构造函数。
class ParentClass {
constructor(dep1: Dep1, dep2: Dep2) { }
}
class ChildClass {
constructor(dep1: Dep1, dep2: Dep2, dep3: Dep3) {
super(dep1, dep2);
}
}
答案 2 :(得分:0)
另一种解决方法是使用内置的 ConstructorParameters
类型助手。
class A {
constructor (foo: number, bar: string) {}
}
class B extends A {
constructor (...args: ConstructorParameters<typeof A>) {
super(...args);
}
}