我有以下职能:
uploadPhoto() {
var nativeElement: HTMLInputElement = this.fileInput.nativeElement;
this.photoService.upload(this.vehicleId, nativeElement.files[0])
.subscribe(x => console.log(x));
}
但是在nativeElement.files [0]上,我得到了一个打字错误,“Object is possible 'null'”。有人能帮我解决这个问题吗?
我尝试将nativeElement声明为空值,但是没有成功。
谢谢你的帮助和时间。
7条答案
按热度按时间lnlaulya1#
files
被定义为FileList | null
,因此它可以是null
。您应该检查
null
(使用if
),或者如果您确定它不是null
,则使用"非空Assert运算符"(!
):"非空Assert操作符"不会执行任何运行时检查,它只是告诉编译器您有特殊信息,并且您知道
nativeElement.files
在运行时不会是null
。如果
nativeElement.files
在运行时是null
,它将生成一个错误。这不是其他语言的安全导航操作符。xoefb8l82#
TypeScript 3.7于2019年11月发布。现在支持“可选链接”,这是处理可能为空值的最简单、最安全的方法:
你只需写:
注意问号!它们检查是否为null/undefined,并且只在没有属性(用点链接)为null/undefined时返回值。
代替
但想象一下更复杂的情况:
crm.contract?.person?.address?.city?.latlang
,否则检查起来要冗长得多。7gyucuyw3#
除了上面提到的所有答案之外,如果用户不希望在其应用程序中进行严格的空值检查,我们可以简单地禁用
tsconfig.json
文件中的strictNullChecks
属性。wkftcu5l4#
如果你确定在所有情况下都有一个文件,你需要编译器来确定。
4jb9z9bj5#
使用Markus的答案(引用了可选链接),我解决了您的问题,方法是将
nativeElement
转换为HTMLInputElement
,然后使用.item(0)
和可选链接运算符?.
访问0th
文件bnlyeluc6#
谢谢。我也遇到过同样的问题。在旧版本中,Ionic还不错。在更新TS2531之后。现在函数有两个非空Assert操作符:
kq4fsx7k7#
app.component.html
app.component.ts