【问题标题】:Cypress/TypeScript: Passing values to class functions on creation of objectCypress/TypeScript:在创建对象时将值传递给类函数
【发布时间】:2021-04-13 10:52:45
【问题描述】:

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

我有这门课(有些简化/缩短):

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。

【问题讨论】:

标签: typescript cypress


【解决方案1】:
let property: Property = new Property(['0', 'City', '1', '0']).addAdress('Address string 1');

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

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

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

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

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

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

更新:w.r.t 您在 TS Playground 上提供的示例

function addPropertyInfo(property: Property) {    
}

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

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

【讨论】:

  • 这就是我所缺少的!谢谢:-)
猜你喜欢
  • 2013-05-11
  • 2015-02-01
  • 1970-01-01
  • 2013-07-10
  • 2020-01-15
  • 2014-06-04
  • 2015-07-07
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多