"X"类型的参数不能分配给"X"类型的参数

Sas*_*sha 52 typescript visual-studio-code

美好的一天.我是使用VSCode的Type Script的新手.

获得以下错误:

  1. 错误TS2322:类型'()=>字符串'不能分配给'string'类型.

  2. 错误TS2322:类型'()=>数字'不能分配给'number'类型.

代码:

DTO.ts

interface DTO {

    getId(): number;
    getValue(): string;
}
export = DTO;
Run Code Online (Sandbox Code Playgroud)

LinkedObject.ts

class LinkedObject {

    public value: string = "Not Set";
    public id: number = 0;

    constructor(value?: string, id?: number) {
        this.value = value;
        this.id = id;
    }
}
export = LinkedObject;
Run Code Online (Sandbox Code Playgroud)

我试图LinkedObject使用上面提到的接口方法实例化类:

TravelClientFormPopulator.ts

class TravelClientFormPopulator {

    public populateComboBoxUsingDTOs(dataObjects: Array<DTO>, comboBoxID: string): void {

        // Get the combo box
        var selectElement = <HTMLSelectElement> document.getElementById(comboBoxID);
        // Reset the options 
        selectElement.options.length = 0;

        var linkedObjectsToAdd: LinkedObject[] = new Array<LinkedObject>();

        var defaultLinkedObject: LinkedObject = new LinkedObject("Not Selected", 0);

        linkedObjectsToAdd.push(defaultLinkedObject);

        for (var i = 0; i < dataObjects.length; i++) {
            var value: string = dataObjects[i].getValue; // Error here
            var id: number = dataObjects[i].getId; // And here
            var linkedObject: LinkedObject = new LinkedObject(value, id);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.

Mar*_*cka 41

你错过了括号:

var value: string = dataObjects[i].getValue(); 
var id: number = dataObjects[i].getId();
Run Code Online (Sandbox Code Playgroud)

  • 了解错误的说法对于将来帮助您是有用的.`Type'()=> string'不能分配给'string'类型.在这个实例中基本上是说"返回字符串的函数不能赋值给string类型的变量"一旦你读了`()=>字符串`正确它应该都有意义.如果它是纯粹的JS你就不会有错误,你的变量会指向一个函数而不是返回的值,这将更难以追踪正在发生的事情. (22认同)

Ign*_*rew 6

还添加其他场景,您可能会看到这些错误

  1. 首先检查你的编译器版本,下载最新的 Typescript 编译器以支持 ES6 语法

  2. 即使输入错误,打字稿仍然会产生输出,这实际上并不会阻止开发,

当您看到这些错误在初始化或调用这些方法或变量时检查语法,
检查函数的参数是否为错误的数据类型,您将其初始化为“字符串”并分配“布尔值”或“数字”

例如

1.

 private errors: string;
    //somewhere in code you assign a boolean value to (string)'errors'
    this.errors=true
    or 
    this.error=5
Run Code Online (Sandbox Code Playgroud)

2.

 private values: Array<number>;    
    this.values.push(value);  //Argument of type 'X' is not assignable to parameter of type 'X'
Run Code Online (Sandbox Code Playgroud)

这里的错误消息是因为缺少数组初始化的方括号,即使没有它也可以工作,但是 VS Code 会出现红色警报。

private values: Array<number> = [];    
this.values.push(value);
Run Code Online (Sandbox Code Playgroud)

注意:
请记住,Javascript 根据分配的值进行类型转换,因此 typescript 会通知他们,但即使在 VS Code 中突出显示这些错误,代码也会执行

前任:

 var a=2;
 typeof(a) // "number"
 var a='Ignatius';
 typeof(a) // "string"
Run Code Online (Sandbox Code Playgroud)


Max*_*ard 5

For what it worth, if anyone has this problem only in VSCode, just restart VSCode and it should fix it. Sometimes, Intellisense seems to mess up with imports or types.

打字稿有关:'RegExpMatchArray'类型的参数不能分配给'string'类型的参数

  • 或重新打开打开的 vs 代码文件选项卡 (2认同)
  • 或者,您可以使用“ctrl + shift + p”进入命令托盘,然后搜索并选择“Typescript:重新启动 TS 服务器”。 (2认同)