typescript - 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。
解决方案
let property: Property = new Property(['0', 'City', '1', '0']).addAdress('Address string 1');
意味着property
将被分配返回值.addAdress(...)
,它碰巧什么也不返回,即void
编译器抱怨您不能将返回类型分配给void
类型Property
要以您编写的方式使用它,您必须: -
- 从方法返回
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
。您可以尝试按照上面列出的两种方法之一来解决此问题。
推荐阅读
- javascript - 如何更改 React 组件的属性?
- python - 如何解决python上的安装错误
- javascript - 如何在 vue js 中从 API 中获取特定组件
- encryption - 什么 AES 256 错误意味着填充无效且无法删除?
- flutter - 应用程序在连接的真实设备上工作,但不是 APK
- amazon-web-services - 无法使用公共地址 (AWS EC2) 调用私有地址
- bison - flex-bison 忽略空格
- assembly - 尝试使用 NASM 设置 Errno
- excel - 在受保护的视图失去工作簿焦点后启用编辑
- c++ - 为什么 std::valarray 不是算术的?