我正试图打印一个带有angular的pdf文件,但在'iframe.src'行出现错误-这是错误:Type 'string | null' is not assignable to type 'string'.
this.myService.printPages(shareFilter)
.subscribe((result: any) => {
const pdf = new Blob([result], { type: 'application/pdf' });
const blobUrl = URL.createObjectURL(pdf);
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl));
document.body.appendChild(iframe);
iframe.contentWindow.print();
}
)
(假设this.sanitizer
是DomSantitizer
的实例(this.sanitizer.sanitize()
具有返回类型string | null
,即可以返回string
或null
。而CCD_ 8期望分配一个CCD_。
在tsconfig.json
中启用strictNullChecks
时,这将导致您遇到的错误,因为您试图将可能是null
的(返回(值分配给必须是string
的属性。
要解决此错误,您必须确保分配给iframe.src
的值不是null
,例如,在之前检查它并在它是null
的情况下分配默认值。
这种检查的一个很好的简写是零合并运算符(??
(:
const url = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this.sanitizer.bypassSecurityTrustResourceUrl(blobUrl));
iframe.src = url ?? '';
为了可读性,this.sanitizer.sanitize()
的返回值首先被分配给url
,其可以是string
或null
。如果是string
/而不是null
,则表达式url ?? ''
将计算为url
;如果是null
,则表达式将计算为空字符串(''
(。