我在这里上课:
export class MyClass {
public name:string;
public addr:string;
constructor() {}
}
我在这里导入它:
import { MyClass } from './MyClass';
// and use it here:
class MyUser {
private _prop : MyClass[];
constructor() {
this._prop = [
new MyClass({name: 'Hello', addr: 'World'}) //<--- this is where the error appears
]
}
}
当我这样做时,我得到一个linting错误:
Supplied parameters do not match any signature of call target
为什么我不能实例化我的课程?
答案 0 :(得分:1)
你的MyClass构造函数中没有提到任何参数。您必须在构造函数中放置参数,以便在实例化此类时可以设置值。您可以将MyClass
属性移动到构造函数parameter
,以使其缩短语法,如下所示。
export class MyClass {
//by having `public` on constructor shortened the syntax.
constructor(public name: string, public addr:string) {
}
}
constructor() {
this._prop = [
new MyClass('Hello', 'World')
]
}
答案 1 :(得分:1)
您的构造函数应该具有以下内容。在您的情况下,您没有定义任何参数:
constructor(param:{name:string, addr:string}) {
this.name = param.name;
this.addr = param.addr;
}
另一种选择是在构造函数级别定义类属性:
constructor(public name:string, public addr:string) {
// No need for this:
// this.name = name;
// this.addr = addr;
}
您现在可以将参数传递给构造函数,并且它们将用于初始化您的实例属性:
constructor() {
this._prop = [
new MyClass('Hello', 'World'})
];
}