我正在寻找这个问题的答案,但我找不到它。所以,我有这个界面:
export interface productsListFromOrder{
product_name: string,
amount: number,
price: number,
}
我创建了一个对象数组然后按下
products:productsListFromOrder[] = []; //productsListFormOrder is my interface
myFunction(): void{
//...
this.products.push({
product_name: product?.name!,
price: product?.price!,
amount: element.amount ? parseInt(element.amount) : 1
})
}
问题是,我有一个错误的标题:
类型'boolean'是不能赋值给类型'number'我确信该类型是正确的,因为我测试了几件事:
1.我显示价格类型,它显示编号
第一个月
1.我在任意[]上设置了产品类型数组,它工作正常,但我想使用我的接口products:productsListFromOrder[] = [];
1.我用这种方法解决这个问题regular_price: typeof product?.price! == 'boolean' ? 0 : product?.price!,
好吧,如果我使用方法2或3,我的代码可以工作,但它不是我的目标。我需要使用我的接口(而不是像第2点中的任何[]),第3点中的代码很难看。那么最重要的-为什么我会出现这个错误?Product.price有一个类型号。我怎么能在不检查类型的情况下编写这个代码呢?
2条答案
按热度按时间k97glaaz1#
TypeScript中的感叹操作称为"非空Assert操作符" this question,答案提供了关于其含义的深入探讨。
执行此操作时:
这是不正确的。因为您在感叹号运算符(Assert
product?.name
不是null或undefined)之前使用了问号运算符(可能允许product?.name
为null或undefined)。我相信您已经禁用了一些类型脚本验证,否则您将收到以下错误:
product?.name!
:TSLint:禁止的非空Assert(no-non-null-assertion)
具有小写的接口名称
productsListFromOrder
:TSLint:类名必须为pascal大小写
第二个问题是jcalz注解中指出的一个简单修复,将其更改为
ProductsListFromOrder
关于错误"类型'boolean'不可分配给类型'number'"
我建议您在这里使用变量
product
:不知何故,它的
price
属性有一个隐式接口as boolean,这反过来又导致了你所得到的错误。为了解决这个问题,
选项1(丑陋)
可以将
price
的值粗略调整为number:选项2(我的建议)
您应该调整变量
product
,使其永远无法为其price属性提供布尔接口。yvt65v4c2#
在模板中,单击 * ngx-shimmering-loader * 的isVisible属性。Angular 语言服务将转到ngx-shimmering-loader文件......如果没有,请重新安装Angular 语言服务并重新启动IDE。在ngx-shimmering-loader文件中,将isVisible:字符串;到可见:布尔型
这对我很有效。