实例化类时出错:提供的参数与调用目标

时间:2016-08-08 15:34:20

标签: angular typescript

我在这里上课:

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

为什么我不能实例化我的课程?

2 个答案:

答案 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')
    ]
}

Playground Demo

答案 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'})
  ];
}