首页 > 解决方案 > Cypress/TypeScript:在创建对象时将值传递给类函数

问题描述

这可能是一个愚蠢或愚蠢的问题,但我无法找到有关它的信息。这可能是因为我没有使用正确的搜索词。

我有这个类(有点简化/缩短):

export class Property {
   id: string = '';
   adresses: string[] = new Array();

   constructor(propertystring: string[]) {
       this.id = propertystring[0];           
   }

   addAdress(adresstring: string) {
       this.adresses.push(adresstring);
   }
}

addPropertyInfo(property: Property) {
    ....
}

我希望能够做到这一点:

addProperty(new Property(['0', 'City', '1', '0']).addAdress('Address string 1'));

但是 - 这给了我错误

TS2345: Argument of type 'void' is not assignable to parameter of type 'Property'

当然,我可以这样做:

let property: Property = new Property(['0', 'City', '1', '0']).addAdress('Address string 1');
property.addAddress('Address string 1');

我知道,我缺少一些基本的东西。但是什么?似乎通过在创建对象时添加对void方法的调用,它变成了一个void参数而不是Property。

标签: typescriptcypress

解决方案


let property: Property = new Property(['0', 'City', '1', '0']).addAdress('Address string 1');

意味着property将被分配返回值.addAdress(...),它碰巧什么也不返回,即void

编译器抱怨您不能将返回类型分配给void类型Property

要以您编写的方式使用它,您必须: -

  1. 从方法返回this(对象本身)addAdress(...)
addAdress() {
    this.adresses.push(adresstring);
    return this;
}

或 2. 分为两个步骤(如您所述)

const property: Property = new Property(['0', 'City', '1', '0']);
property.addAdress('Address string 1');

更新:写您在 TS Playground 上提供的示例

function addPropertyInfo(property: Property) {    
}

addPropertyInfo(new Property(['0', 'City', '1', '0']).addAdress('Address string 1'));

与我上面的回答类似,addPropertyInfo(...)期望类型Property并且您正在为其提供类型void。您可以尝试按照上面列出的两种方法之一来解决此问题。


推荐阅读